Share via


查詢結果快取

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 會傳送另一個包含 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 共用相同的快取,因此適用相同的容量和收回原則。

語法

setquery_results_cache_per_shard查詢

注意

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

深入瞭解 語法慣例

範例

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