ES查看segment大小


摘自: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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM