共用方式為


查詢結果快取

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 相當於不設定 選項。

查詢之間的相容性

相同的查詢

查詢結果快取只會針對視為與先前快取查詢「完全相同」的查詢傳回結果。 如果符合下列所有條件,則會將兩個查詢視為相同:

不相容的查詢

如果下列任何條件成立,將不會快取查詢結果:

沒有有效的快取專案

如果找不到滿足時間條件約束的快取結果,或快取中「完全相同」查詢沒有快取的結果,則會執行查詢並快取其結果,只要:

  • 查詢執行順利完成,且
  • 查詢結果大小不超過 16 MB。

快取的結果

服務如何指出從快取提供查詢結果? 回應查詢時,Kusto 會傳送另一個包含數據行和數據行的 Value ExtendedProperties 回應數據表Key。 快取的查詢結果將會有另一個資料列附加至該資料表:

  • 數據列的數據 Key 列將包含字串 ServerCache
  • 資料欄的資料 Value 列將包含具有兩個字段的屬性包:
    • OriginalClientRequestId - 指定原始要求的 ClientRequestId
    • OriginalStartedOn - 指定原始要求的執行開始時間。

Distribution

叢集節點不會共用快取。 每個節點都有自己的私人記憶體中的專用快取。 如果兩個相同的查詢落在不同的節點上,則會在兩個節點上執行並快取查詢。 如果使用 弱式一 致性,就可能發生此程式。 藉由將查詢一致性設定為 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,因此會套用相同的容量和收回原則。

語法

setquery_results_cache_per_shard; 查詢

注意

此選項可以在查詢文字中設定,或設定為 用戶端要求屬性

深入瞭解 語法慣例

範例

set query_results_cache_per_shard;
GithubEvent
| where CreatedAt > ago(180d)
| summarize arg_max(CreatedAt, Type) by Id