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。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章