我在生產環境中遇到了一些慢查詢,我配置了慢日志以找到一些像這樣的慢查詢資訊(query_string 超時 500 毫秒):
[2021-06-21T10:43:33,930][DEBUG][index.search.slowlog.query.xxxx] [xxx][g][2] took[1s], took_millis[1043], total_hits[424690], types[top], stats[], search_typ e[QUERY_THEN_FETCH], total_shards[6], source[{query_string}]
本例中查詢超時為500ms,回應的take_millis為1043ms。據我所知,超時僅對查詢決議有用,而 take 值表示 es 中的執行時間,沒有一些外部階段,如Query timing: 'took' value and what I'm measure。我有兩個問題:
- 首先,為什么超時和take_millis之間有504ms(1043 - 500 = 504)?
- 其次,我如何知道超時和 take_millis 時間之間的詳細時間成本?
非常感謝!
uj5u.com熱心網友回復:
對查詢設定超時并不能確保查詢在其執行時間超過該超時時被實際取消。Elasticsearch 檔案指出:
“默認情況下,正在運行的搜索僅檢查它是否在段邊界上被取消,因此取消可能會被大段延遲。”
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search.html#global-search-timeout
檢查問題3627、4586和2929
這可以解釋 timeout 和 take_millis 之間的 504ms,您的查詢只需要那么長時間,并且沒有及時取消。
要分析查詢執行并查看可能導致這些長時間延遲的原因,您可以使用組態檔 API重新運行查詢。請注意,如果無法重現查詢的緩慢執行,這將無助于您解決問題。如果您的查詢大部分時間運行良好,請嘗試將這些運行緩慢的查詢與服務器負載等外部因素相關聯。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/335562.html
標籤:爪哇 走 弹性搜索 暂停 elasticsearch-dsl
上一篇:用于監控的elasticsearch用戶(應用哪個角色?)
下一篇:找到有條件的物件陣列的最小值
