使用 dmesg 来查看一些硬件或驱动程序的信息或问题。

es 索引后,第一次查询慢,第二次查询快,不同关键字,查询还是会快,是什么原理?

Elasticsearch | 作者 LiuQiu7 | 发布于2017年07月06日 | 阅读数:14153

es 索引后,第一次查询慢(几秒),第二次查询快(几毫秒),是因为第一次查询lucene段走I/O磁盘访问,并将打开的段文件记录到系统的文件缓存,那不同的关键字,打开的段应该是不一样啊,不是还是会走I/O磁盘访问吗?为什么还是会快呢?而且文件系统缓存用工具清空了,查询还是快的?此外,还做了测试,把ES服务关掉,写一个简单的占用内存的程序,将内存占用到98%左右,想以此达到将文件缓存刷新覆盖的作用,然后再启动ES进行查询,发现第一次查询速度还是快的,这是为什么?
是否一个索引只要执行过一次查询,即使是不同的关键字查询,后面针对此索引的查询操作都会变快?
已邀请:

fanzm

赞同来自: openWells

请问下,问题解决了吗,我现在也遇到同样的问题

kepmoving - 90后

赞同来自:

第一次查询慢,是因为首次查询的时候,索引文件还没打开,查询后索引文件打开了并保存在内存中,后面查询就快了

Justbaba

赞同来自:

我用highlevelclient查询es,但是每隔10h以上来进行首次查询时,就会抛出超时的问题,然后第二次就好了,我感到很费解,大佬们经验丰富,知道怎么解决吗?
部分提示如下:
“java.net.SocketTimeoutException: 30,000 milliseconds timeout on connection http-outgoing-0 [ACTIVE]
at org.elasticsearch.client.RestClient.extractAndWrapCause(RestClient.java:808)
at org.elasticsearch.client.RestClient.performRequest(RestClient.java:248)
at org.elasticsearch.client.RestClient.performRequest(RestClient.java:235)
at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1514)
at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1484)
at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1454)
at org.elasticsearch.client.RestHighLevelClient.search(RestHighLevelClient.java:970)”
 

要回复问题请先登录注册