ES的性能优化

咱们在不少场景下会用到ES帮助咱们解决搜索问题,可是不少人了解只是停留在表面,如何深刻的使用ES,并作针对性的性能优化呢?缓存

批量提交

当大量的写任务时,能够采用批量提交的方案,可是须要考虑每次提交数据量的最优性能,这样能够根据网络状况,集群状况,数据大小控制批量写入的数量。性能优化

  • 能够一次批量写入5M~15M开始,直到性能没有提高时结束。
  • 逐渐增长并发数,使用监控工具观察CPU,IO,网络,内存等状况。
  • 若是抛出EsRejectedExecutionException错误,说明集群已经到达处理瓶颈了,能够适当增长集群节点。

优化存储设备

现代服务器上,磁盘每每是系统的最大瓶颈。 而且ES自己是磁盘使用密集型的服务,因此在磁盘能力提高后,集群总体性能会大幅度提升。服务器

  • 条件容许,强烈建议SSD,SSD相对机械磁盘具备超高的读写速度和稳定性。
  • 采用RAID0,能够提高写入速度。
  • 配置ES在多块磁盘同时进行读写。

使用合理的段合并

Lucene以段形式存储数据,当新数据建立索引时,会自动建立一个新段,因此在一个索引文件中包含多个段。数据越多后,索引段越多,须要消耗的文件句柄及cpu就越多。网络

Lucene后台服务会按期计算庞大的段合并工做量,因此:并发

  • 当段合并速度落后索引写入速度时,为避免堆积,es会把写索引线程数量下降到一个,并打印告警信息。
  • 为防止由于段合并影响搜索性能,es默认对段合并进行限制,默认20m/s。

减小refresh次数

Lucene为提升写性能会采用延迟写入方式,只是将数据写入内存中,当延迟大于1s时,会触发一次refresh,refresh会把内存中数据以段形式刷新到操做系统文件缓存系统中。工具

数据以段形式刷新到操做系统的文件系统后才能够进行搜索,因此若是搜索实时性要求不高,能够增长延迟,能够减小段数量,下降合并压力。性能

减小flush次数

Translog数量达到512m会触发一次flush。主要为了把文件缓存系统中段数据持久化到磁盘,这个过程比较耗时,能够设置index.translog.flush_threshold_size参数修改缓存数据量,减小刷新次数,好比能够增长一倍。优化

减小副本数量

es的副本能够保证集群可用性,提升搜索并发能力,可是下降写入性能。 由于文档写入内容须要同步副本。操作系统

若是大批量导入能够关闭index.number_of_replicas:0,写入成功后在开启副本。线程

相关文章
相关标签/搜索