ES的性能優化

咱們在不少場景下會用到ES幫助咱們解決搜索問題,可是不少人瞭解只是停留在表面,如何深刻的使用ES,並作針對性的性能優化呢?緩存

批量提交

當大量的寫任務時,能夠採用批量提交的方案,可是須要考慮每次提交數據量的最優性能,這樣能夠根據網絡狀況,集羣狀況,數據大小控制批量寫入的數量。性能優化

  • 能夠一次批量寫入5M~15M開始,直到性能沒有提高時結束。
  • 逐漸增長併發數,使用監控工具觀察CPU,IO,網絡,內存等狀況。
  • 若是拋出EsRejectedExecutionException錯誤,說明集羣已經到達處理瓶頸了,能夠適當增長集羣節點。

優化存儲設備

現代服務器上,磁盤每每是系統的最大瓶頸。 而且ES自己是磁盤使用密集型的服務,因此在磁盤能力提高後,集羣總體性能會大幅度提升。服務器

  • 條件容許,強烈建議SSD,SSD相對機械磁盤具備超高的讀寫速度和穩定性。
  • 採用RAID0,能夠提高寫入速度。
  • 配置ES在多塊磁盤同時進行讀寫。

使用合理的段合併

Lucene以段形式存儲數據,當新數據建立索引時,會自動建立一個新段,因此在一個索引文件中包含多個段。數據越多後,索引段越多,須要消耗的文件句柄及cpu就越多。網絡

Lucene後臺服務會按期計算龐大的段合併工做量,因此:併發

  • 當段合併速度落後索引寫入速度時,爲避免堆積,es會把寫索引線程數量下降到一個,並打印告警信息。
  • 爲防止由於段合併影響搜索性能,es默認對段合併進行限制,默認20m/s。

減小refresh次數

Lucene爲提升寫性能會採用延遲寫入方式,只是將數據寫入內存中,當延遲大於1s時,會觸發一次refresh,refresh會把內存中數據以段形式刷新到操做系統文件緩存系統中。工具

數據以段形式刷新到操做系統的文件系統後才能夠進行搜索,因此若是搜索實時性要求不高,能夠增長延遲,能夠減小段數量,下降合併壓力。性能

減小flush次數

Translog數量達到512m會觸發一次flush。主要爲了把文件緩存系統中段數據持久化到磁盤,這個過程比較耗時,能夠設置index.translog.flush_threshold_size參數修改緩存數據量,減小刷新次數,好比能夠增長一倍。優化

減小副本數量

es的副本能夠保證集羣可用性,提升搜索併發能力,可是下降寫入性能。 由於文檔寫入內容須要同步副本。操作系統

若是大批量導入能夠關閉index.number_of_replicas:0,寫入成功後在開啓副本。線程

相關文章
相關標籤/搜索