美文网首页优化及排查
Elastic Search优化

Elastic Search优化

作者: zhglance | 来源:发表于2019-03-27 14:56 被阅读55次
    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,禁用刷新机制。

    相关文章

      网友评论

        本文标题:Elastic Search优化

        本文链接:https://www.haomeiwen.com/subject/bbezvqtx.html