Elasticsearch索引(寫入)速度優化

1.縮減索引字段

es中只保留必要字段,縮減字段能有效縮減文檔大小,提高寫入速度。

2.合理設置分片數和副本數

7.*默認1個分片1和副本。Elasticsearch官方建議一個分片的大小應該在20到40 GB左右分片個數建議 >= 集羣節點的個數,但是當索引較小時(寫入性能需求 > 搜索性能需求時),可以使用1個分片,過多的分片也會影響寫入性能。

分片大小對於搜索查詢非常重要。

  • 一方面, 如果分配給索引的分片太多,則Lucene分段會很小,從而導致開銷增加。 當同時進行多個查詢時,許多小分片也會降低查詢吞吐量。
  • 另一方面,太大的分片會導致搜索性能下降和故障恢復時間更長。

在批量索引文檔前可以將副本數設置爲0,索引完成後恢復原來的值。

"number_of_replicas":1
"number_of_shards":1

3.索引刷新間隔refresh_interval

默認情況下refresh_interval爲1s,數據寫入1秒後就可以被搜索到,每次索引的refresh會產生一個新的Lucene段,Lucene段即爲segment,segment在複合一定條件後,會自動合併,因此這會導致頻繁的segment merge行爲,如果不需要特別高的搜索實時性,應該降低索引refresh週期。-1:禁止刷新。在批量索引文檔前可以將refresh_interval設置爲-1,完成後修改爲默認值。由於我的場景是每天都會全量同步,此處將refresh_interval設置爲120s

"refresh_interval": "120s"

假如refresh_interval設置爲-1,只是es中的定時任務不會執行。但是es會根據一個versionMap去強制做一次refresh操作,緩衝區滿的時候也會觸發refresh操作。每30秒有個定時器去檢查shardIndexingBufferSize大小,最終調用updateShardBuffers方法去refresh

4.translog設置

隨着translog文件越來越大時要考慮把內存中的數據刷新到磁盤中,這個過程稱爲flush。在默認設置下,translog的持久化策略爲: request,每個請求 都“flush”,配置異步刷新,刷新時間120s。

"index.translog.durability": "async"
"index.translog.sync_interval": "120s"

5.線程池隊列

當寫入隊列滿時,es會拒絕接受索引事件,適當增加寫入隊列大小,默認爲200。線程池大小官方不建議進行修改。

thread_pool.write.queue_size: 500

6.使用es自動生成的id

無更新操作時,儘量使用es自動生成的id,當你index一個document使用特定的id,ES需要去檢查是否在同一個shard存在相同的ID的文檔,這是一個相當昂貴的操作,並且隨着文檔數量的增加,花費呈指數增長。如果使用自動生成id,ES會跳過這個檢查,使得Index速度更快。但是當需要更新操作時不適用。

7.Indexing 緩衝大小

在執行大量的索引操作時,indices.memory.index_buffer_size的默認 設置可能不夠,這和可用堆內存、單節點上的shard數量相關,可以考慮適當增大該值,增大該值,減少segment,就會減少merge。默認大小爲10% 48mb

indices.memory.index_buffer_size: 20%
indices.memory.min_index_buffer_size: 96mb

8.jvm.options

Xmx和Xms的大小默認爲1g,可以適當增加該值。

-Xms2g
-Xmx2g

9.禁用swapping

在ES的官方文檔上,要求Disabled Swapping。執行swapoff -a暫時禁用,機器重啓後會恢復。要永久的關閉swapping,需要編輯/etc/fstab文件,將包含swap的行的註釋掉。

參考文檔:

  1. https://www.cnblogs.com/eviltuzki/p/8439036.html
  2. https://blog.csdn.net/wmj2004/article/details/80804411
  3. https://blog.csdn.net/u012133048/article/details/93408374?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
  4. https://blog.csdn.net/HaixWang/article/details/80846749?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
  5. https://www.cnblogs.com/MyOceansWeb/p/12653965.html
  6. https://blog.csdn.net/laoyang360/article/details/85109769
  7. https://blog.csdn.net/laoyang360/article/details/97695931
  8. 7.*官方文檔
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章