咱们在不少场景下会用到ES帮助咱们解决搜索问题,可是不少人了解只是停留在表面,如何深刻的使用ES,并作针对性的性能优化呢?缓存
当大量的写任务时,能够采用批量提交的方案,可是须要考虑每次提交数据量的最优性能,这样能够根据网络状况,集群状况,数据大小控制批量写入的数量。性能优化
现代服务器上,磁盘每每是系统的最大瓶颈。 而且ES自己是磁盘使用密集型的服务,因此在磁盘能力提高后,集群总体性能会大幅度提升。服务器
Lucene以段形式存储数据,当新数据建立索引时,会自动建立一个新段,因此在一个索引文件中包含多个段。数据越多后,索引段越多,须要消耗的文件句柄及cpu就越多。网络
Lucene后台服务会按期计算庞大的段合并工做量,因此:并发
Lucene为提升写性能会采用延迟写入方式,只是将数据写入内存中,当延迟大于1s时,会触发一次refresh,refresh会把内存中数据以段形式刷新到操做系统文件缓存系统中。工具
数据以段形式刷新到操做系统的文件系统后才能够进行搜索,因此若是搜索实时性要求不高,能够增长延迟,能够减小段数量,下降合并压力。性能
Translog数量达到512m会触发一次flush。主要为了把文件缓存系统中段数据持久化到磁盘,这个过程比较耗时,能够设置index.translog.flush_threshold_size参数修改缓存数据量,减小刷新次数,好比能够增长一倍。优化
es的副本能够保证集群可用性,提升搜索并发能力,可是下降写入性能。 由于文档写入内容须要同步副本。操作系统
若是大批量导入能够关闭index.number_of_replicas:0,写入成功后在开启副本。线程