1. 程式人生 > >es中的一些知識點記錄

es中的一些知識點記錄

一個 url 5-0 num mage 每次 強制 查詢 策略

1. forcemerge接口

強制段合並,設置為1時,是期望最終只有1個索引段。但實際情況是,合並的結果是段的總數會減少,但仍大於1,可以多次執行強制合並的命令。

設置的的目標值越小。合並消耗的時間會越久。

 curl -XPOST http://127.0.0.1:9200/logstash-2015-06.10/_forcemerge?max_num_segments=1

段合並會消耗較多的磁盤IO資源,不要在大量建立索引時,查詢較多時,執行該操作。

2.段合並參數設置

  • index.merge.policy.floor_segment 默認 2MB,小於這個大小的 segment,優先被歸並。
  • index.merge.policy.max_merge_at_once 默認一次最多歸並 10 個 segment
  • index.merge.policy.max_merge_at_once_explicit 默認 forcemerge 時一次最多歸並 30 個 segment。
  • index.merge.policy.max_merged_segment 默認 5 GB,大於這個大小的 segment,不用參與歸並。forcemerge 除外。

根據這段策略,其實我們也可以從另一個角度考慮如何減少 segment 歸並的消耗以及提高響應的辦法:加大 flush 間隔,盡量讓每次新生成的 segment 本身大小就比較大。

fresh和flush的概念。fresh默認為1s,意味著近乎實時查詢,索引建立好後1s後就可以進行查詢。這時是將索引放到了文件系統的緩存中,雖然可以查詢,但是並沒有真正寫入到磁盤中,存在數據丟失的風險。所以es引入了translog,內存中的數據在寫入文件系統的緩存中時,同時在translog中記錄一份,一旦es重啟,未寫入磁盤中的數據還可以從translog中進行恢復。

flush會觸發lucene commit,並清空translog文件,這個過程稱為flush。

默認情況下ES每隔5s會去檢測要不要flush translog,默認條件是:每 30 分鐘主動進行一次 flush,或者當 translog 文件大小大於 200MB主動進行一次 flush。

技術分享圖片

es中的一些知識點記錄