查詢結果快取
適用於:✅Microsoft網狀架構✅Azure 數據✅總管 Azure 監視器✅Microsoft Sentinel
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 字串相同)。
- 這兩個查詢會針對相同的資料庫進行。
- 這兩個查詢會共用相同的 用戶端要求屬性。 針對快取目的,會忽略下列屬性:
- ClientRequestId
- 申請
- User
不相容的查詢
如果下列任何條件成立,將不會快取查詢結果:
- 查詢會參考已啟用 RestrictedViewAccess 原則的 數據表。
- 查詢會參考已啟用 RowLevelSecurity 原則的數據表。
- 查詢會使用下列任一函式:
- 查詢會 存取外部資料表 或 外部數據。
- 查詢會使用 評估外掛程式 運算元。
沒有有效的快取專案
如果找不到滿足時間條件約束的快取結果,或快取中「完全相同」查詢沒有快取的結果,則會執行查詢並快取其結果,只要:
- 查詢執行順利完成,且
- 查詢結果大小不超過 16 MB。
快取的結果
服務如何指出從快取提供查詢結果?
回應查詢時,Kusto 會傳送另一個包含數據行和數據行的 Value
ExtendedProperties 回應數據表Key
。
快取的查詢結果將會有另一個資料列附加至該資料表:
- 數據列的數據
Key
列將包含字串ServerCache
- 資料欄的資料
Value
列將包含具有兩個字段的屬性包:OriginalClientRequestId
- 指定原始要求的 ClientRequestId。OriginalStartedOn
- 指定原始要求的執行開始時間。
發佈
叢集節點不會共用快取。 每個節點都有自己的私人記憶體中的專用快取。 如果兩個相同的查詢落在不同的節點上,則會在兩個節點上執行並快取查詢。 如果使用 弱式一 致性,就可能發生此程式。 藉由將查詢一致性設定為 affinitizedweakconsistency
,您可以有相同查詢前端上的弱式一致性查詢,因而增加快取命中率。
管理
支援下列管理和可檢視性命令:
- 顯示查詢結果快取:傳回與查詢結果快取相關的統計數據。
- 清除查詢結果快取:清除查詢結果快取。
- 重新整理查詢快取專案:可以使用 [OptionQueryResultsCacheForceRefresh] 用戶端要求屬性來重新
query_results_cache_force_refresh
整理特定的查詢快取專案。 當設定為true
時,此命令會在現有快取存在時強制重新整理查詢結果快取。 此程式適用於需要查詢結果可供查詢的案例。 此屬性必須與 『query_results_cache_max_age』 搭配使用,並透過 ClientRequestProperties 物件傳送。 屬性不能是 『set』 語句的一部分。
容量
快取容量目前固定在每個叢集節點 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