elasticsearch 優化相關

2022-09-13 22:24:16 字數 1816 閱讀 1954

es寫入過程關鍵步驟:

資料寫入index buffer緩衝和translog日誌檔案。index buffer(indices.memory.index_buffer_size) 大小預設是heap的10%,最小值為48m。

每隔一秒鐘(index.refresh_interval),index buffer中的資料被寫入新的segment file,並進入os cache,此時segment被開啟並供search使用。

buffer被清空。

重複1~3,新的segment不斷新增,buffer不斷被清空,而translog中的資料不斷累加

當translog長度達到一定程度的時候,commit操作發生。

假設我們的應用場景要求是,每秒 300 萬的寫入速度,每條 500 位元組左右。

針對這種對於搜尋效能要求不高,但是對寫入要求較高的場景,我們需要盡可能的選擇恰當寫優化策略。

綜合來說,可以考慮以下幾個方面來提公升寫索引的效能:

優化方案:

1.lucene 在新增資料時,採用了延遲寫入的策略,預設情況下索引的 refresh_interval 為 1 秒。

lucene 將待寫入的資料先寫到記憶體中,超過 1 秒(預設)時就會觸發一次 refresh,然後 refresh 會把記憶體中的的資料重新整理到作業系統的檔案快取系統中。

如果我們對搜尋的實效性要求不高,可以將 refresh 週期延長,例如 30 秒。

這樣還可以有效地減少段重新整理次數,但這同時意味著需要消耗更多的heap記憶體。

index.refresh_interval:30s
2.由於 lucene 段合併的計算量龐大,會消耗大量的 i/o,所以 es 預設採用較保守的策略,讓後台定期進行段合併,如下所述:

put /_cluster/settings

}

3,修改index_buffer_size 的設定,可以設定成百分數,也可設定成具體的大小,大小可根據集群的規模做不同的設定測試。優化可以設定成20%以上。

indices.memory.index_buffer_size:10%(預設是heap的10%)

indices.memory.min_index_buffer_size: 48mb(預設)

indices.memory.max_index_buffer_size

4,堆大小的設定

由於es構建基於lucene, 而lucene設計強大之處在於lucene能夠很好的利用作業系統記憶體來快取索引資料,以提供快速的查詢效能。lucene的索引檔案segements是儲存在單檔案中的,並且不可變,對於os來說,能夠很友好地將索引檔案保持在cache中,以便快速訪問;因此,我們很有必要將一半的物理記憶體留給lucene ; 另一半的物理記憶體留給es(jvm heap )。所以, 在es記憶體設定方面,可以遵循以下原則:

當機器記憶體小於64g時,遵循通用的原則,50%給es,50%留給lucene。

5,使用 hot_threads api。

集群所有節點:

curl -xget `hostname -i`:9200/_nodes/hot_threads

單個節點:

curl -xget `hostname -i`:9200/_nodes/node-name/hot_threads

其中 node-name 替換成自己節點節點名稱

使用 top + jstatck 獲取堆疊資訊

ElasticSearch 效能優化

getrace系統的所有搜尋都是用elasticsearch來做的,在使用elasticsearch的過程中碰到了一些問題,這裡記錄一下。一 在查詢呼叫鏈的時候。整體資料量大 每天60g 7 420g 但是結果集比較少 只有幾百行 的時候,查詢時間經常會超過1分鐘,慢的甚至需要5,6分鐘.優化1 經...

ElasticSearch 優化配置

索引建立優化 house properties title price area createtime lastupdatetime cityenname regionenname direction distancetosubway subwaylinename subwaystationname...

elasticsearch效能優化

elasticsearch查詢依賴作業系統的頁面快取記憶體 file system cache 因此除了需要給elasticsearch的jvm分配足夠的記憶體以外,還需要給頁快取預留記憶體。例如單機32g記憶體,給jvm配置16g記憶體後,剩餘16g預留記憶體不需要額外配置,也不要讓其他程序占用這...