博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES查看segment大小
阅读量:5786 次
发布时间:2019-06-18

本文共 1018 字,大约阅读时间需要 3 分钟。

摘自:http://www.aboutyun.com/thread-17078-1-1.html

 

Segment Memory

Segment不是file吗?segment memory又是什么?前面提到过,一个segment是一个完备的lucene倒排索引,而倒排索引是通过词典 (Term Dictionary)到文档列表(Postings List)的映射关系,快速做查询的。 由于词典的size会很大,全部装载到heap里不现实,因此Lucene为词典做了一层前缀索引(Term Index),这个索引在Lucene4.0以后采用的数据结构是FST (Finite State Transducer)。 这种数据结构占用空间很小,Lucene打开索引的时候将其全量装载到内存中,加快磁盘上词典查询速度的同时减少随机磁盘访问次数。
下面是词典索引和词典主存储之间的一个对应关系图:
<ignore_js_op> 
说了这么多,要传达的一个意思就是,ES的data node存储数据并非只是耗费磁盘空间的,为了加速数据的访问,每个segment都有会一些索引数据驻留在heap里。因此segment越多,瓜分掉的heap也越多,并且这部分heap是无法被GC掉的! 理解这点对于监控和管理集群容量很重要,当一个node的segment memory占用过多的时候,就需要考虑删除、归档数据,或者扩容了。
怎么知道segment memory占用情况呢?  CAT API可以给出答案。
1.  查看一个索引所有segment的memory占用情况:
<ignore_js_op> 
2.  查看一个node上所有segment占用的memory总和:
<ignore_js_op> 
那么有哪些途径减少data node上的segment memory占用呢? 总结起来有三种方法:

    •     删除不用的索引。
    •     关闭索引 (文件仍然存在于磁盘,只是释放掉内存)。需要的时候可以重新打开。
    •     定期对不再更新的索引做optimize (ES2.0以后更改为force merge api)。这Optimze的实质是对segment file强制做合并,可以节省大量的segment memory。
本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/6401254.html
,如需转载请自行联系原作者
你可能感兴趣的文章
PAT A1116
查看>>
App上架/更新怕被拒? iOS过审“避雷秘籍”请查收
查看>>
CentOS 7 防火墙操作
查看>>
关于 top 工具的 6 个替代方案
查看>>
程序员最讨厌的9句话,你可有补充?
查看>>
PAT A1037
查看>>
浅谈RPC
查看>>
ansible playbook的使用
查看>>
android学习笔记(不断更新...)
查看>>
[转帖] ASP.NET + jQuery异步调用页面后台实例分析
查看>>
CSS前端性能优化
查看>>
1006. Sign In and Sign Out (25)
查看>>
php上传文件大小修改
查看>>
论使用HashMap优化双层For循环的实际性能
查看>>
BZOJ2527[Poi2011]Meteors——整体二分+树状数组
查看>>
PowerMock简介
查看>>
datasg中数据的存储结构
查看>>
高级强制类型转换 - C++快速入门37
查看>>
call指令和ret指令的配合使用
查看>>
电脑操作的“奇技淫巧”
查看>>