1、背景
集群配置為:8 個(gè) node 節(jié)點(diǎn),16 核 32G,索引 4 分片 1 副本。應(yīng)用程序的查詢邏輯是按經(jīng)緯度排序后找前 200 條文檔。
1、應(yīng)用對(duì)查詢要求比較高,search 沒(méi)有慢查詢的狀態(tài)。

2、集群壓測(cè)性能不能上去,cpu 使用未打滿,查詢的 qps 上不去,且有隊(duì)列堆積。



2、優(yōu)化方法
通過(guò)云廠商內(nèi)核組的同學(xué)抓取火焰圖發(fā)現(xiàn),主要消耗在 fetch phrase 階段。

ES 默認(rèn)從_source 取,每次查詢都會(huì)讀取一行數(shù)據(jù),并需要做解壓,如果對(duì)查詢耗時(shí)要求比較高,應(yīng)當(dāng)在查詢時(shí)關(guān)閉 store fields ,查詢語(yǔ)句 指定“stored_fields”: [“none”], 砍掉元數(shù)據(jù)字段,同時(shí)用 “docvalue_fields”: [“video_fact_id”], 指定只拉取需要的字段,降低序列化跟網(wǎng)絡(luò)傳輸開(kāi)銷。約能提升40% 性能。
推薦DSL如下:
GET /your_index/_search
{
"query": {
"match_all": {} // 或者是其他符合你需求的查詢
},
"stored_fields": ["none"], // 不獲取任何存儲(chǔ)的字段
"docvalue_fields": ["field1", "field2"] // 只獲取需要的doc value字段
}
3、優(yōu)化后效率
3.1 查詢耗時(shí)有進(jìn)一步的提升

3.2 壓測(cè)時(shí)cpu使用率和qps也有了明顯的上升


壓測(cè)最終的指標(biāo):優(yōu)化前1800qps,優(yōu)化后9200qps。
4、優(yōu)化根因分析
在優(yōu)化前,由于Elasticsearch默認(rèn)從_source字段讀取數(shù)據(jù),這導(dǎo)致每次查詢都需要讀取整行數(shù)據(jù)并進(jìn)行解壓。這個(gè)過(guò)程不僅耗費(fèi)CPU資源,還會(huì)增加響應(yīng)時(shí)間,特別是當(dāng)文檔內(nèi)容龐大時(shí)。
解壓操作是CPU密集型的,而在高負(fù)載情況下,這可能成為系統(tǒng)瓶頸,從而限制了查詢性能和吞吐量。
優(yōu)化后,通過(guò)指定“stored_fields": ["none"],我們有效地排除了_source字段的讀取和解壓過(guò)程,這顯著減少了每個(gè)查詢的CPU負(fù)載。
而使用“docvalue_fields”指定從列存中獲取字段內(nèi)容,沒(méi)有壓縮的轉(zhuǎn)換,進(jìn)一步減少了數(shù)據(jù)處理的開(kāi)銷。這種方法不僅降低了CPU的使用率,同時(shí)只提取必要的字段也減少了了網(wǎng)絡(luò)傳輸?shù)呢?fù)擔(dān)。
最終,通過(guò)這些優(yōu)化措施,查詢的QPS(每秒查詢數(shù))得到了顯著提升,從1800qps提高到9200qps,這在高性能應(yīng)用場(chǎng)景中是一個(gè)巨大的飛躍。
更高的QPS意味著系統(tǒng)能夠更快地處理更多的查詢請(qǐng)求,提高了整體的吞吐量和性能。
5、小結(jié)
總結(jié)來(lái)說(shuō),通過(guò)精細(xì)地調(diào)整查詢策略和減少不必要的數(shù)據(jù)處理,我們可以顯著提升Elasticsearch的性能,這在處理大規(guī)模數(shù)據(jù)和高并發(fā)查詢的環(huán)境下尤為重要。
6、官方文檔
https://www.elastic.co/guide/en/elasticsearch/reference/8.4/search-fields.html#disable-stored-fields
https://www.elastic.co/guide/en/elasticsearch/reference/8.4/search-fields.html#docvalue-fields
5、作者介紹
金多安,Elastic 認(rèn)證專家,Elastic資深運(yùn)維工程師,死磕Elasticsearch知識(shí)星球嘉賓,星球Top活躍技術(shù)專家,搜索客社區(qū)日?qǐng)?bào)責(zé)任編輯
推薦閱讀
全網(wǎng)首發(fā)!從 0 到 1 Elasticsearch 8.X 通關(guān)視頻
重磅 | 死磕 Elasticsearch 8.X 方法論認(rèn)知清單
如何系統(tǒng)的學(xué)習(xí) Elasticsearch ?
2023,做點(diǎn)事
更短時(shí)間更快習(xí)得更多干貨!
和全球?近2000+?Elastic 愛(ài)好者一起精進(jìn)!
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-766771.html
比同事?lián)屜纫徊綄W(xué)習(xí)進(jìn)階干貨!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-766771.html
到了這里,關(guān)于Elasticsearch 優(yōu)化查詢中獲取字段內(nèi)容的方式,性能提升5倍!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!