优化及排查

Elastic Search优化

2019-03-27  本文已影响55人  zhglance
1.最大打开文件数

设置系统的最大打开文件数,可以调大到32k以上,且集群每个节点都要操作;

2.JVM的内存

修改Elastic Search的JVM的内存大小;

3.memory_lock设置为true

锁定物理地址,避免内存交换,提高性能;

4.权衡分片个数

分片过多会导致打开的文件比较多,增加节点之间的通讯代价,影响性能;分片数太少会导致单个分片索引过大,检索速度变慢,一般10个左右比较合适,不易超过30个,每个分片数据应该在20G左右,即分片数 = 数据总量 / 20G;

5.控制副本数量

副本增加可以提高检索能力,但是也增加了副本同步数据的压力,增加磁盘空间,一般设置2-3个副本集合;

6.定时对索引进行合并优化

Segment越多,占用的segment memory就会越多,性能反而降低。索引量不大时,可以设置Segment为1,另外可以调整segment merge的配置参数来提高性能,如max_thread_count和单个segment的最大容量等;

7.一个index下只创建一个type

因为只删除type不会释放空间。

8.close关闭不使用的index

索引处于open状态,索引库的Segment就会赞用过内存空间,close后会释放内存空间,不释放磁盘空间;

9.清除已经删除的数据记录

删除后的数据记录不是立刻清除磁盘数据,而是导入到了.del文件中,这部分数据仍然参与检索,在检索过程中再判断是否删除,然后再过滤。因此清除已经删除的数据记录会提高检索效率;

10.第一次大批量导入数据到ES时,可以将副本设置为0

等到数据导入完成后,再恢复副本数量,避免了导入数据时,又要同步副本的性能压力;

11.禁用_all字段

Index默认会有一个_all字段,默认把所有字段的数据copy到_all字段里,方便了query,却增加了索引时间和索引大小;

12.日志级别调整

Elastic Search的默认log级别是trace,当慢查询操作500ms时,就会打印日志,造成了集群负载,影响性能。可以将log级别调整为info;

13._source检索优化

Elastic Search默认检索只会返回ID,然后根据这个ID去倒排索引你中取每个field数据,当开启时,Elastic Search可以根据ID直接检索对应source JSON的field,不再需要倒排索引;

14.index刷新间隔

默认情况下,index刷新间隔为1秒,即数据写入1秒后就可以被query到,每次刷新都会产生新的Lucene段,进而导致频繁的Segment merge行为。

15.使用ik分词

针对中文查询搜索,一定要安装ik分词,有ik_max_word和ik_smart,极大的提高的查询性能和准确度,否则就会逐个中文字进行匹配,耗费性能。
在插入文档时,ES查看该字段有没有定义analyzer,如果定义了就用定义的,否则使用ES默认的;
在搜索文档时,ES会先去看字段有没有定义search_analyzer,如果没有定义,就去看有没有analyzer,再没有定义就使用否则使用ES默认的。
针对中文分词,一般创建index时指定analyzer = ik_max_word,search_analyzer = ik_smark。

16.使用索引模板和别名

根据业务增量需求,可以基于日期模板来创建索引,然后通过roll over API滚动索引。

17.热词冷词分离

采取冷热分离机制,热数据存储到SSD,提高检索效率;冷数据定期进行shrink操作,以缩减存储;

18.使用curator

采取curator进行索引的生命周期管理。

19.写入禁用刷新机制

写入前关闭refresh_interval设置为-1,禁用刷新机制。

上一篇下一篇

猜你喜欢

热点阅读