怎么實現(xiàn)ElasticSearch優(yōu)化,針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
創(chuàng)新互聯(lián)建站是一家專注于網(wǎng)站設(shè)計、網(wǎng)站制作與策劃設(shè)計,寧鄉(xiāng)網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:寧鄉(xiāng)等地區(qū)。寧鄉(xiāng)做網(wǎng)站價格咨詢:18980820575
盡量不要把數(shù)據(jù)結(jié)構(gòu)不同的數(shù)據(jù)放到同一索引中,并且可以考慮將數(shù)據(jù)量較少的集合創(chuàng)建較少的分片存儲。當然若數(shù)據(jù)之間存在父子關(guān)系則例外,畢竟父子關(guān)系的數(shù)據(jù)不能存儲在不同的索引當中。
1、盡量使用批量索引
2、客戶端盡量使用多線程批量索引
3、增加刷新機制的間隔 默認是1s -1代表禁用Es從數(shù)據(jù)索引到能不查詢整個過程默認為1s,使用index.refresh_interval參數(shù)控制。若對數(shù)據(jù)的實時性要求不高的話,可適當調(diào)整該參數(shù)到業(yè)務(wù)系統(tǒng)可接受的范圍。在該間隔時間內(nèi)es會強制創(chuàng)建一個新的segment(段),時間間隔越大則創(chuàng)建的段也會越大,也減小了后續(xù)字段合并段的壓力(段其實的lucene底層的數(shù)據(jù)結(jié)構(gòu),詳細可查詢lucene與segment的關(guān)系)。
4、數(shù)據(jù)初始索引時禁用刷新和副本機制若有一大批數(shù)據(jù)需要索引的時候(前提條件),由于刷新和副本機制對數(shù)據(jù)索引性能影響較大,可以將index.refresh_interval設(shè)置為-1,將index.number_of_replicas設(shè)置為0以禁用該兩機制。直到本次數(shù)據(jù)全部索引完成后再將這兩個參數(shù)調(diào)整至合理的值,然而應(yīng)該明白性能與數(shù)據(jù)安全總是不能同時得到滿足,完全看業(yè)務(wù)數(shù)據(jù)的重要性。
5、禁止內(nèi)存交換
暫時禁用交換 sudo swapoff - a
永久禁用它 需要編輯該/etc/fstab文件并注釋掉包含該單詞的所有行swap
6、文件系統(tǒng)緩存的內(nèi)存不能低于服務(wù)器的一半文件系統(tǒng)緩存將被用來緩沖輸入/輸出操作,這對于es來說非常的重要,要求內(nèi)存不能少于服務(wù)器內(nèi)存的一半,即es的jvm heap的值設(shè)置應(yīng)該小于服務(wù)器內(nèi)存的一半。
7、盡量使用es自動生成的id作為es的document id應(yīng)該知道其作用第一是確定文檔的唯一性,第二默認情況下使用id作為route值計算文檔應(yīng)該被分配到哪個shard,同時也是生成uid的成員。若索引時制定id的情況下,會先檢測其唯一性,其代價是比較大的,并且隨著索引文檔數(shù)的增加消耗會越來越大,若沒有業(yè)務(wù)需要最好使用自動生成的id(會跳過檢查過程)。
9、索引緩存的大小
10、string類型字段不分詞
精細設(shè)置全文域:string類型字段默認會分詞,不僅會額外占用資源,而且會影響創(chuàng)建索引的速度。所以,把不需要分詞的字段設(shè)置為not_analyzed
11、 設(shè)置段合并的線程數(shù)量 :
curl -XPUT 'your-es-host:9200/nginx_log-2018-03-20/_settings' -d '{
"index.merge.scheduler.max_thread_count" : 1
}'
12、不用開啟http服務(wù)。將其中的配置 參數(shù)這樣設(shè)置:http.enabled: false
13、Elastic官方文檔建議:一個Node中一個索引最好不要多于三個shards.配置total_shards_per_node參數(shù),限制每個index每個節(jié)點最多分配多少個發(fā)片.
14、分片(Shard):一個索引會分成多個分片存儲,分片數(shù)量在索引建立后不可更改,推薦【分片數(shù)*副本數(shù)=集群數(shù)量】
14、 段和合并Elasticsearch 默認設(shè)置在這塊比較保守:不希望搜索性能被后臺合并影響。不過有時候(尤其是 SSD,或者日志場景)限流閾值太低了。
默認值是 20 MB/s,對機械磁盤應(yīng)該是個不錯的設(shè)置。如果你用的是 SSD,可以考慮提高到 100–200 MB/s。測試驗證對你的系統(tǒng)哪個值合適:
PUT /_cluster/settings
{
"persistent" : {
"indices.store.throttle.max_bytes_per_sec" : "100mb"
}
}
可以增大index.translog.flush_threshold_size參數(shù),默認是200M,可以增大到如1GB。
增大這個參數(shù)可以允許translog在flush前存放更大的段(segment);更大的段的創(chuàng)建會減少flush的頻率,
并且更大的段合并越少,會減少磁盤IO,索引性能更高。
1、 查詢緩存
分片查詢緩存的主要目的是緩存聚合,提示詞和命中數(shù)(不會緩存返回的文檔)
如果想要開啟mastering索引的查詢緩存,可以執(zhí)行類似下面的操作
PUT /mastering/_settings
{ "index.requests.cache.enable": true }
2、 查詢緩存默認使用節(jié)點堆棧的1%內(nèi)存,可以通過下列方式對該值進行設(shè)置:
indices.requests.cache.size: 2%
關(guān)于怎么實現(xiàn)ElasticSearch優(yōu)化問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。