查詢結果快取
Kusto 包含查詢結果快取。 您可以選擇在發出查詢時取得快取的結果。 如果快取可傳回查詢的結果,您將會獲得更佳的查詢效能和較低的資源耗用量。 不過,此效能在結果中會有一些「過期」的代價。
使用快取
將 query_results_cache_max_age
選項設定為查詢的一部分,以使用查詢結果快取。 您可以在查詢文字中或作為用戶端要求屬性來設定此選項。 例如:
set query_results_cache_max_age = time(5m);
GithubEvent
| where CreatedAt > ago(180d)
| summarize arg_max(CreatedAt, Type) by Id
選項值為 timespan
,表示結果快取的最大「期限」,自查詢開始時間測量。 除了設定時間範圍之外,快取項目已過時,且將不再使用。 將值設定為 0 相當於未設定該選項。
查詢之間的相容性
完全相同的查詢
查詢結果快取只會針對被視為與先前的快取查詢「完全相同」的查詢傳回結果。 如果符合下列所有條件,則會將兩個查詢視為完全相同:
- 兩個查詢具有相同表示法 (UTF-8 字串形式)。
- 兩個查詢是對相同資料庫進行。
- 兩個查詢共用相同的用戶端要求屬性。 基於快取目的,會忽略下列屬性:
不相容的查詢
如果下列任何條件成立,將不會快取查詢結果:
- 查詢參考的資料表已啟用 RestrictedViewAccess 原則。
- 查詢參考的資料表已啟用 RowLevelSecurity 原則。
- 查詢會使用下列任何函式:
- 查詢會存取外部資料表或外部資料。
- 查詢會使用評估外掛程式運算子。
沒有有效的快取項目
如果找不到滿足時間條件約束的快取結果,或快取中的「完全相同」查詢沒有快取的結果,則會執行查詢並快取其結果,只要:
- 查詢執行成功完成,且
- 查詢結果大小未超過 16 MB。
來自快取的結果
服務如何指出查詢結果是從從快取提供?
回應查詢時,Kusto 會傳送另一個包含 Key
資料行和 Value
資料行的 ExtendedProperties 回應資料表。
快取的查詢結果將會有另一個資料列附加至該資料表:
- 資料列的
Key
資料行將包含字串ServerCache
- 資料列的
Value
資料行將包含具有兩個欄位的屬性包:OriginalClientRequestId
- 指定原始要求的 ClientRequestId。OriginalStartedOn
- 指定原始要求的執行開始時間。
散發
叢集節點不會共用快取。 每個節點在其自己的私人儲存體中會有專用的快取。 如果兩個完全相同的查詢抵達不同節點上,則會在這兩個節點上執行和快取該查詢。 如果使用弱式一致性,則可能會發生此程序。 藉由將查詢一致性設定為 affinitizedweakconsistency
,您可以有完全相同的弱式一致性查詢抵達相同查詢前端,進而增加快取命中率。
管理性
以下是支援的管理和可檢視性命令:
- 顯示查詢結果快取:傳回與查詢結果快取相關的統計數據。
- 清除查詢結果快取:清除查詢結果快取。
- 重新整理查詢快取專案:您可以使用 (OptionQueryResultsCacheForceRefresh) 用戶端要求屬性來重新
query_results_cache_force_refresh
整理特定的查詢快取專案。 當設定為true
時,此命令會在現有快取存在時強制重新整理查詢結果快取。 此程式適用於需要查詢結果可供查詢的案例。 此屬性必須與 『query_results_cache_max_age』 搭配使用,並透過 ClientRequestProperties 物件傳送。 屬性不能是 『set』 語句的一部分。
Capacity
快取容量目前固定為每個叢集節點 1 GB。 收回原則是 LRU。
分區層級查詢結果快取
快速連續執行完全相同查詢多次,並可容忍傳回稍舊的資料時,查詢結果快取即很有效。 不過,某些案例 (例如即時儀表板) 會需要最新的結果。
例如,每隔 10 秒執行一次,且跨過去 1 小時執行的查詢,可以從在儲存體 (分區) 層級的快取中繼查詢結果獲得幫助。
當 Query results cache
使用中時,會自動啟用分區層級查詢結果快取。 因為其會與 Query results cache
共用相同的快取,因此適用相同的容量和收回原則。
語法
set
query_results_cache_per_shard
;查詢
注意
此選項可以在查詢文字中或作為用戶端要求屬性來設定。
深入瞭解 語法慣例。
範例
set query_results_cache_per_shard;
GithubEvent
| where CreatedAt > ago(180d)
| summarize arg_max(CreatedAt, Type) by Id
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應