1.最大打開文件數(shù)
設(shè)置系統(tǒng)的最大打開文件數(shù)罕模,可以調(diào)大到32k以上茎毁,且集群每個節(jié)點都要操作;
2.JVM的內(nèi)存
修改Elastic Search的JVM的內(nèi)存大薪胀住;
3.memory_lock設(shè)置為true
鎖定物理地址沃粗,避免內(nèi)存交換粥惧,提高性能;
4.權(quán)衡分片個數(shù)
分片過多會導(dǎo)致打開的文件比較多陪每,增加節(jié)點之間的通訊代價影晓,影響性能;分片數(shù)太少會導(dǎo)致單個分片索引過大檩禾,檢索速度變慢,一般10個左右比較合適疤祭,不易超過30個盼产,每個分片數(shù)據(jù)應(yīng)該在20G左右,即分片數(shù) = 數(shù)據(jù)總量 / 20G;
5.控制副本數(shù)量
副本增加可以提高檢索能力勺馆,但是也增加了副本同步數(shù)據(jù)的壓力戏售,增加磁盤空間,一般設(shè)置2-3個副本集合草穆;
6.定時對索引進行合并優(yōu)化
Segment越多灌灾,占用的segment memory就會越多,性能反而降低悲柱。索引量不大時锋喜,可以設(shè)置Segment為1,另外可以調(diào)整segment merge的配置參數(shù)來提高性能豌鸡,如max_thread_count和單個segment的最大容量等嘿般;
7.一個index下只創(chuàng)建一個type
因為只刪除type不會釋放空間。
8.close關(guān)閉不使用的index
索引處于open狀態(tài)涯冠,索引庫的Segment就會占用過內(nèi)存空間炉奴,close后會釋放內(nèi)存空間,不釋放磁盤空間蛇更;
9.清除已經(jīng)刪除的數(shù)據(jù)記錄
刪除后的數(shù)據(jù)記錄不是立刻清除磁盤數(shù)據(jù)瞻赶,而是導(dǎo)入到了.del文件中赛糟,這部分?jǐn)?shù)據(jù)仍然參與檢索,在檢索過程中再判斷是否刪除砸逊,然后再過濾璧南。因此清除已經(jīng)刪除的數(shù)據(jù)記錄會提高檢索效率;
10.第一次大批量導(dǎo)入數(shù)據(jù)到ES時痹兜,可以將副本設(shè)置為0
等到數(shù)據(jù)導(dǎo)入完成后穆咐,再恢復(fù)副本數(shù)量,避免了導(dǎo)入數(shù)據(jù)時字旭,又要同步副本的性能壓力对湃;
11.禁用_all字段
Index默認(rèn)會有一個_all字段,默認(rèn)把所有字段的數(shù)據(jù)copy到_all字段里遗淳,方便了query拍柒,卻增加了索引時間和索引大小屈暗;
12.日志級別調(diào)整
Elastic Search的默認(rèn)log級別是trace拆讯,當(dāng)慢查詢操作500ms時,就會打印日志养叛,造成了集群負(fù)載种呐,影響性能∑可以將log級別調(diào)整為info爽室;
13._source檢索優(yōu)化
Elastic Search默認(rèn)檢索只會返回ID,然后根據(jù)這個ID去倒排索引你中取每個field數(shù)據(jù)淆攻,當(dāng)開啟時阔墩,Elastic Search可以根據(jù)ID直接檢索對應(yīng)source JSON的field,不再需要倒排索引瓶珊;
14.index刷新間隔
默認(rèn)情況下啸箫,index刷新間隔為1秒,即數(shù)據(jù)寫入1秒后就可以被query到伞芹,每次刷新都會產(chǎn)生新的Lucene段忘苛,進而導(dǎo)致頻繁的Segment merge行為。
15.使用ik分詞
針對中文查詢搜索丑瞧,一定要安裝ik分詞柑土,有ik_max_word和ik_smart,極大的提高的查詢性能和準(zhǔn)確度绊汹,否則就會逐個中文字進行匹配稽屏,耗費性能。
在插入文檔時西乖,ES查看該字段有沒有定義analyzer狐榔,如果定義了就用定義的坛增,否則使用ES默認(rèn)的;
在搜索文檔時薄腻,ES會先去看字段有沒有定義search_analyzer收捣,如果沒有定義,就去看有沒有analyzer庵楷,再沒有定義就使用否則使用ES默認(rèn)的罢艾。
針對中文分詞,一般創(chuàng)建index時指定analyzer = ik_max_word尽纽,search_analyzer = ik_smark咐蚯。
16.使用索引模板和別名
根據(jù)業(yè)務(wù)增量需求,可以基于日期模板來創(chuàng)建索引弄贿,然后通過roll over API滾動索引春锋。
17.熱詞冷詞分離
采取冷熱分離機制,熱數(shù)據(jù)存儲到SSD差凹,提高檢索效率期奔;冷數(shù)據(jù)定期進行shrink操作,以縮減存儲危尿;
18.使用curator
采取curator進行索引的生命周期管理呐萌。
19.寫入禁用刷新機制
寫入前關(guān)閉refresh_interval設(shè)置為-1,禁用刷新機制谊娇。
20.深分頁問題
Elastic Search為避免深分頁帶來的性能問題(可參考:http://www.reibang.com/p/f25c19d73b8f)搁胆,Elastic Search禁止查詢10000條以后的數(shù)據(jù)(可配置)。Elastic Search提供了scroll游標(biāo)來解決深分頁問題邮绿,即初始化查詢時將所有符合條件的搜索結(jié)果緩存起來,然后遍歷緩存里面的數(shù)據(jù)攀例。避免每次搜索都必須重新排序的問題船逮,但是初始化之后,對索引的數(shù)據(jù)更改不會同步到緩存中粤铭,即不對游標(biāo)遍歷結(jié)果有影響挖胃。
21.數(shù)據(jù)壓縮
針對term index,僅僅使用數(shù)據(jù)的一部分前綴與term dictionary的block之間的映射關(guān)系梆惯,再結(jié)合FST(Finite State Transducers)的壓縮技術(shù)酱鸭,可以使term index緩存到內(nèi)存中;
針對ID使用Frame Of Reference壓縮;