ElasticSearch效能優化策略

2021-08-27 22:42:34 字數 4622 閱讀 8973

elasticsearch效能優化主要分為4個方面的優化。

一、伺服器部署

1、增加1-2臺伺服器,用於負載均衡節點

elasticsearch的配置檔案中有2個引數:node.master和node.data。這兩個參 數搭配使用時,能夠幫助提供伺服器效能。

1.1> node.master: false node.data: true

該node伺服器只作為乙個資料節點,只用於儲存索引資料。使該node伺服器功能 單一,只用於資料儲存和資料查詢,降低其資源消耗率。

1.2> node.master: true node.data: false

該node伺服器只作為乙個主節點,但不儲存任何索引資料。該node伺服器將使用 自身空閒的資源,來協調各種建立索引請求或者查詢請求,講這些請求合理分發到相關 的node伺服器上。

1.3> node.master: false node.data: false

該node伺服器即不會被選作主節點,也不會儲存任何索引資料。該伺服器主要用 於查詢負載均衡。在查詢的時候,通常會涉及到從多個node伺服器上查詢資料,並請 求分發到多個指定的node伺服器,並對各個node伺服器返回的結果進行乙個彙總處理, 最終返回給客戶端。

2、關閉data節點伺服器中的http功能

針對elasticsearch集群中的所有資料節點,不用開啟http服務。將其中的配置 引數這樣設定:http.enabled: false,同時也不要安裝head, bigdesk, marvel等監控 外掛程式,這樣保證data節點伺服器只需處理建立/更新/刪除/查詢索引資料等操作。

http功能可以在非資料節點伺服器上開啟,上述相關的監控外掛程式也安裝到這些服 務器上,用於監控elasticsearch集群狀態等資料資訊。

這樣做一來出於資料安全考慮,二來出於服務效能考慮。

3、一台伺服器上最好只部署乙個node

一台物理伺服器上可以啟動多個node伺服器節點(通過設定不同的啟動port), 但一台伺服器上的cpu,記憶體,硬碟等資源畢竟有限,從伺服器效能考慮,不建議一台 伺服器上啟動多個node節點。

二、伺服器配置

1、配置索引執行緒池的大小

elastisearch伺服器有多個執行緒池大小配置。主要有:index,search,suggest, get,bulk,percolate,snapshot,snapshot_data,warmer,refresh。

在此主要針對index和search進行乙個配置調整。index操作包含:創 建/更新/刪除索引資料。search操作主要針對使用者的各種搜尋操作。

具體配置如下:

threadpool:

index:

type: fixed

size: 100

search:

type: fixed

size: 1000

2、建立/查詢索引設定相同的分詞解析器

該配置具體如下:

index:

analysis:

analyzer:

ik:alias: [news_analyzer_ik,ik_analyzer]

type: org.elasticsearch.index.analysis.ikanalyzerprovider

index.analysis.analyzer.default.type: ik

3、確定分片(shard)的數量和副本(replica)的數量

elasticsearch在建立索引資料時,最好指定相關的shards數量和replicas,

否則會使用伺服器中的預設配置引數shards=5,replicas=1。

因為這兩個屬性的設定直接影響集群中索引和搜尋操作的執行。假設你有足夠的

機器來持有碎片和副本,那麼可以按如下規則設定這兩個值:

1) 擁有更多的碎片可以提公升索引執行能力,並允許通過機器分發乙個大型的索引;

2) 擁有更多的副本能夠提公升搜尋執行能力以及集群能力。

對於乙個索引來說,number_of_shards只能設定一次,而number_of_replicas可以使用索引更新設定api在任何時候被增加或者減少。

這兩個配置引數在配置檔案的配置如下:

index.number_of_shards: 5

index.number_of_shards: 1

4、查詢速度慢的日誌配置

在進行實際應用中,會記錄下查詢速度慢或者新增索引速度慢的操作記錄,為後

續效能優化提供依據。其具體配置如下:

index.search.slowlog.threshold.query.warn: 10s

index.search.slowlog.threshold.query.info: 5s

index.search.slowlog.threshold.query.debug: 2s

index.search.slowlog.threshold.query.trace: 500ms

index.search.slowlog.threshold.fetch.warn: 1s

index.search.slowlog.threshold.fetch.info: 800ms

index.search.slowlog.threshold.fetch.debug: 500ms

index.search.slowlog.threshold.fetch.trace: 200ms

index.indexing.slowlog.threshold.index.warn: 10s

index.indexing.slowlog.threshold.index.info: 5s

index.indexing.slowlog.threshold.index.debug: 2s

index.indexing.slowlog.threshold.index.trace: 500ms

三、資料結構優化

1、儘量減少不需要的字段

elasticsearch中儲存的資料是用於搜尋服務,因此其他一些不需要用於搜尋的字段最好不存到es中,這樣即節省空間,同時在相同的資料量下,也能提高搜尋效能。

2、routing值的設定

通常情況下,往elasticsearch伺服器新增索引資料時,是無需指定routing值。elasticsearch會根據索引id,將該條資料儲存到elasticsearch集群中的乙個shard中。而當指定了routing值為accountid(使用者id),則elasticsearch會將相同accountid的多個資料都存放到同乙個shard中,後續查詢的時候,在指定routing值後,elasticsearch只需要查詢乙個shard就能得到所有需要的資料,而不用再去查詢所有的shard,從而大大提供了搜尋效能。

四、執行期優化

1、optimize

隨著時間的推移,elasicsearch中每個shard的資料也會越來越多,索引越來越大,而生成的segment(在每個shard中,每個索引檔案實際是由多個sgment檔案組成)也會越來越多。而segment越多的話,則查詢的效能越差,所以通過呼叫optimize命令,將多個segment合併成更少數量的segment(最少為乙個),從而來提高查詢效能。

在呼叫該命令時,可以設定幾個引數,這些引數的具體含義如下:

1.1> max_num_segments

段數優化。要全面優化索引,將其設定為1。預設設定只需檢查是否需要執行乙個合併,如果需要,則執行它。【經過測試,該值越小,查詢速度越快】

1.2> only_expunge_deletes

該優化操作是否只清空打有刪除標籤的索引記錄。在lucence中,在執行刪除操作時,不會直接刪除segment中的記錄,而是對該記錄打上delete標籤。當多個segment進行合併操作時,就會生成乙個新的segment,而該新的segment中不再包含刪除的記錄。這個引數允許只對哪些包含刪除記錄的segment進行優化操作。

1.3>flush

在執行完優化操作之後,再執行重新整理操作。預設值為true

1.4>wait_for_merge

當該引數設定為true時,表示其他請求操作要等到合併segment操作結束之後,再進行響應。值得注意的是,由於這個優化操作是乙個非常耗時,耗資源的事情,使用者提交的請求操作是不能容忍等待這麼久,所以這個引數最好設定為false.

具體呼叫命令如下:

當elasticsearch伺服器啟動之後,業務系統中要使用的索引資料暫時沒有匯入到記憶體中,因此當使用者進行第一次資料搜尋時,會因為資料匯入耗時很久,而嚴重影響使用者的使用體驗。為了解決該問題,可以使用warmer工具。通過elastisearch提供的工具,可以register/delete/get特定名稱的warmer。通常情況下,warmer包含的請求需要載入大量的索引資料(例如在資料搜尋中需要針對特定欄位的排序操作,或者用到一些聚合sum,min,max函式的查詢等),這樣才能達到預熱的效果。

具體呼叫示例如下(下面的warmer是針對索引名為test的warmer,warmer定義的名字為warmer_1):

curl -xput localhost:9200/test/_warmer/warmer_1 -d '

},"aggs" : }}

}'

ElasticSearch 效能優化

getrace系統的所有搜尋都是用elasticsearch來做的,在使用elasticsearch的過程中碰到了一些問題,這裡記錄一下。一 在查詢呼叫鏈的時候。整體資料量大 每天60g 7 420g 但是結果集比較少 只有幾百行 的時候,查詢時間經常會超過1分鐘,慢的甚至需要5,6分鐘.優化1 經...

elasticsearch效能優化

elasticsearch查詢依賴作業系統的頁面快取記憶體 file system cache 因此除了需要給elasticsearch的jvm分配足夠的記憶體以外,還需要給頁快取預留記憶體。例如單機32g記憶體,給jvm配置16g記憶體後,剩餘16g預留記憶體不需要額外配置,也不要讓其他程序占用這...

ElasticSearch效能優化策略

一 伺服器部署演算法的基本思想 1 增加1 2臺伺服器,用於負載均衡節點 elasticsearch的配置檔案中有2個引數 node.master和node.data。這兩個參 數搭配使用時,能夠幫助提供伺服器效能。1.1 node.master false node.data true 該node...