elasticsearch 的Merge


一个ES index 包含有多个sharding, sharding 主要用于分布式。 一个sharding里面也可以包含多个segment. es 在indexing 的时候会产生很多的segments。 segments 太多会导致文件句柄浪费严重, 并且搜索性能底下。 ES 自己也会去做merge, 算法和cassandra 的sizeTiered 算法类似(但稍逊一些)。合并后,search 性能有所提升,文件句柄所有下降。

如果你想强制进行一次激烈的compact将每个sharding 里面的indexes 数目都变成1.
POST {index-list}/_optimize?max_num_segments=1
然后可以通过
GET {index-list}/_segments 来确认segment count 的数目。

但如果在merge 的时候还有写入,你也有可能发现还有很多segments, 但那些segment 里面的document 会比较少。
在我自己的一次测试中,compact 之前有150 多个segments, compact 后只有5个, 因为有5个sharding. 文件句柄数从2000+ 降到了114 个。

如果要调整es 的默认compact 参数,可以参考 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules-merge.html
目前我自己遇到的情况是:
我们的某些log 每天产生一个index, 大小在30G左右。有些1个月产生一个log, 大小40~50G. 我们会有一个后台程序,每次产生新的log 后就会对老的index 进行全面的compact.


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM