2.5全文索引太慢

nebula 2.5 全文索引执行太慢,是因为没有配置什么参数吗?2.0上一般花费几十毫秒但是在2.5上画了好几秒钟。

LOOKUP ON  TagSentence  WHERE WILDCARD(TagSentence.Content,"*make*" ,30)
explain format="dot" LOOKUP ON  TagSentence  WHERE 

  digraph exec_plan {
      rankdir=BT;
      "Project_3"[label="{Project_3|outputVar: \[\{\"colNames\":\[\"VertexID\"\],\"type\":\"DATASET\",\"name\":\"__Project_3\"\}\]|inputVar: __Filter_2}", shape=Mrecord];
      "Filter_2"->"Project_3";
      "Filter_2"[label="{Filter_2|outputVar: \[\{\"colNames\":\[\"VertexID\",\"TagSentence.Content\"\],\"type\":\"DATASET\",\"name\":\"__Filter_2\"\}\]|inputVar: __TagIndexFullScan_1}", shape=Mrecord];
      "TagIndexFullScan_4"->"Filter_2";
      "TagIndexFullScan_4"[label="{TagIndexFullScan_4|outputVar: \[\{\"colNames\":\[\"VertexID\",\"TagSentence.Content\"\],\"type\":\"DATASET\",\"name\":\"__TagIndexFullScan_1\"\}\]|inputVar: }", shape=Mrecord];
      "Start_0"->"TagIndexFullScan_4";
      "Start_0"[label="{Start_0|outputVar: \[\{\"colNames\":\[\],\"type\":\"DATASET\",\"name\":\"__Start_0\"\}\]|inputVar: }", shape=Mrecord];
  }

WILDCARD(TagSentence.Content,"*make*" ,30)


profile format="dot" LOOKUP ON  TagSentence  WHERE WILDCARD(TagSentence.Content,"*make*" ,30)

| id | name             | dependencies | profiling data                                            | operator                                           
|  3 | Project          | 2            | ver: 0, rows: 32, execTime: 166us, totalTime: 168us       | outputVar: [       
|  2 | Filter           | 4            | ver: 0, rows: 32, execTime: 316163us, totalTime: 316170us | outputVar: [             
|  4 | TagIndexFullScan | 0            | ver: 0, rows: 41841, execTime: 0us, totalTime: 3480478us  | outputVar: [      
|  0 | Start            |              | ver: 0, rows: 0, execTime: 0us, totalTime: 83us           | outputVar: [        

上面是explain的结果和profile的结果。
看起来大量时间花费在了filter上。还没细研究filter的机制,之前看过graph的日志,es查询请求默认200ms很快返回的。

看这块儿有一个异步拉取数据的逻辑发生。

1 个赞

麻烦补充下机器配置和参数配置

单机 4C 4G

HDD?

是固态硬盘,几万条数据会有这么大影响?

让研发同学来回复你哈

研发同学有看吗? :joy:

2.0和2.5在查询逻辑上没有变化。在同步数据时,2.5支持拉取snapshot。查询时看下cpu和memory的负载?

很奇怪,top查看了一下,查询那一会儿 CPU 在二三十;memory 在一点几、二点几;

这里没有同步数据,我指的是数据查询,不是数据同步es。

上周您这个问题 问过 @bright-starry-sky 老师,2.5按理说 es 导入的数据比较 2.0 应该只是会更少而不是更多,您能确认一下前后的 es 上条件真的一致(硬件、网络、配置 etc…) 么?

image
我说的不是向es导入数据,我说的是使用es做全文索引查询数据,数据很早就导入完成了,是查询操作。

我是测试环境2.0用了一段时间,是想升级到2.5看看之前的bug有没有修复。

查询逻辑的代码2.0和2.5直接没啥变化,这个问题还是挺奇怪的,前段时间倒是改了一个连接延迟的问题,不知道和这个有没有关系。建议从两个方面排查问题,1,es本身的查询没问题吧,是同一套es系统,只是换了nebula吗?2,2.5 之后改过连接延迟的问题,建议用master上最新的nightly-build试试?

我抓包看过es很快返回了数据。但是日志里面打印了很多不是es查询到的数据【因为我是使用make全文索引的,日志打印的很多数据里面并没有make,这个字符串】。

什么日志?能看到真实es查上来的数据?能贴个图吗?

套用下边的格式,直接在es上查一下?
GET /my_temp_index_3/_search HTTP/1.1
Host: 127.0.0.1:9200
Content-Type: application/json

{
“query”: {
“bool”: {
“must”: [
{
“match”: {
“tag_id”: 2
}
},
{
“match”: {
“column_id”: “col2”
}
},
{
“regexp”: {
“value”: “c+”
}
}
]
}
},
“from”: 0,
“size”: 1
}

我抓过包,也用它的请求查过。

took 是 个位数到十位数之间