如何提高elasticsearch的查询速度

ES性能并非想像中的那么好

ES数据量一大时,特别是第一次搜索的时候耗时会很久(甚至10s以上)。也不要认为改个参数就能改善所有性能慢的场景。

通过ES慢日志可分析查询效率

ES提供了慢日志,但默认是没有开启的。ES中的慢日志主要分两类:索引慢日志、搜索慢日志。如何开启呢?参考如下:

PUT /my_index/_settings

{

"index.search.slowlog.threshold.query.warn" : "10s",

"index.search.slowlog.threshold.fetch.debug": "500ms",

"index.indexing.slowlog.threshold.index.info": "5s"

}

ES查询性能优化方案

1、升级硬件配置(硬盘、内存)

对于硬盘建议选用SSD,它比机械硬盘读写速度更快,另外内存需要适时调整。

2、JVM参数调优

要知道ES是用Java开发的,跑在JVM中,如果JVM参数设置不当也会影响ES的性能!ES安装后默认的堆内存是1G,这个值太小了,需要适当调大。

3、加大文件系统缓存设置

ES依懒底层的FileSystem Cache,文件系统缓存值若太小则会导致ES查询时会从硬盘中查询,效率低。若文件系统缓存大小设置合理,则很多查询可以直接从缓存内查询。

4、减少副本数量

ES默认副本是3个,副本越多虽然能提高集群的可用性,但是也增加了搜索的并发数、也会影响索引写入效率。所以建议副本不要过多,一般1~3个足够了。

5、禁止深度分页

ES它的分页效率很低(若每页10条,查询第100页时,ES实际查询的是每个Shard中的1000条数据进行处理后再返回第100页里的10条数据),页数越靠后,CPU消耗越大,查询效率越低!所以我们要禁止深度分页。

6、Filter 比 Query 效率好

Filter查询结果可以缓存,而且不需要像Query那样计算相关性分值,所以Filter效率更高。

 

7,服务器内存要大一点,因为索引加载需要大量内存,并且最大最小内存设置相同值,防止GC时候的大量stop the world!

8,设置合理的索引刷新时间,indwx.fresh_interval如果设置过大,索引查不到容易导致异常,设置太小,服务器压力会很大!

9,禁用_all,打开会导致拷贝增加,查询效率变低!

10,防止设置过多的分片副本,增大合并时间,影响查询效率!

11,优化查询返回字段,减少内存占用!

12,添加查询缓存!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值