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的行的註釋掉。
參考文檔:
- https://www.cnblogs.com/eviltuzki/p/8439036.html
- https://blog.csdn.net/wmj2004/article/details/80804411
- 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
- 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
- https://www.cnblogs.com/MyOceansWeb/p/12653965.html
- https://blog.csdn.net/laoyang360/article/details/85109769
- https://blog.csdn.net/laoyang360/article/details/97695931
- 7.*官方文檔