Freigeben über


Abfrageergebniscache

Gilt für: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Kusto enthält einen Abfrageergebnissecache. Sie können beim Ausgeben einer Abfrage zwischengespeicherte Ergebnisse abrufen. Sie erhalten eine bessere Abfrageleistung und einen geringeren Ressourcenverbrauch, wenn die Ergebnisse Ihrer Abfrage vom Cache zurückgegeben werden können. Diese Leistung kommt jedoch auf Kosten einiger "Veraltetkeit" in den Ergebnissen.

Verwenden Sie den Cache

Legen Sie die query_results_cache_max_age Option als Teil der Abfrage fest, um den Abfrageergebnissecache zu verwenden. Sie können diese Option im Abfragetext oder als Clientanforderungseigenschaft festlegen. Zum Beispiel:

set query_results_cache_max_age = time(5m);
GithubEvent
| where CreatedAt > ago(180d)
| summarize arg_max(CreatedAt, Type) by Id

Der Optionswert ist ein timespan Wert, der das maximale "Alter" des Ergebniscaches angibt, gemessen von der Startzeit der Abfrage. Über den festgelegten Zeitbereich hinaus ist der Cacheeintrag veraltet und wird nicht mehr verwendet. Das Festlegen eines Werts von 0 entspricht nicht dem Festlegen der Option.

Kompatibilität zwischen Abfragen

Identische Abfragen

Der Abfrageergebnissecache gibt Ergebnisse nur für Abfragen zurück, die als "identisch" mit einer vorherigen zwischengespeicherten Abfrage betrachtet werden. Zwei Abfragen werden als identisch betrachtet, wenn alle folgenden Bedingungen erfüllt sind:

  • Die beiden Abfragen haben dieselbe Darstellung (wie UTF-8-Zeichenfolgen).
  • Die beiden Abfragen werden an derselben Datenbank vorgenommen.
  • Die beiden Abfragen verwenden dieselben Clientanforderungseigenschaften. Die folgenden Eigenschaften werden für Zwischenspeicherungszwecke ignoriert:
    • ClientRequestId
    • Application
    • Benutzer

Inkompatible Abfragen

Die Abfrageergebnisse werden nicht zwischengespeichert, wenn eine der folgenden Bedingungen zutrifft:

Kein gültiger Cacheeintrag

Wenn ein zwischengespeichertes Ergebnis, das die Zeiteinschränkungen erfüllt, nicht gefunden werden konnte, oder es kein zwischengespeichertes Ergebnis aus einer "identischen" Abfrage im Cache gibt, wird die Abfrage ausgeführt und die Ergebnisse zwischengespeichert, sofern:

  • Die Abfrageausführung wurde erfolgreich abgeschlossen, und
  • Die Größe der Abfrageergebnisse überschreitet nicht 16 MB.

Ergebnisse aus dem Cache

Wie gibt der Dienst an, dass die Abfrageergebnisse aus dem Cache bereitgestellt werden? Wenn Sie auf eine Abfrage antworten, sendet Kusto eine weitere ExtendedProperties-Antworttabelle , die eine Key Spalte und eine Value Spalte enthält. Zwischengespeicherte Abfrageergebnisse haben eine weitere Zeile an diese Tabelle angefügt:

  • Die Spalte der Key Zeile enthält die Zeichenfolge. ServerCache
  • Die Spalte der Value Zeile enthält einen Eigenschaftenbehälter mit zwei Feldern:
    • OriginalClientRequestId- Gibt die ClientRequestId der ursprünglichen Anforderung an.
    • OriginalStartedOn - Gibt die Ausführungszeit der ursprünglichen Anforderung an.

Distribution

Der Cache wird nicht von Clusterknoten freigegeben. Jeder Knoten verfügt über einen dedizierten Cache in einem eigenen privaten Speicher. Wenn zwei identische Abfragen auf unterschiedlichen Knoten landen, wird die Abfrage ausgeführt und auf beiden Knoten zwischengespeichert. Dieser Vorgang kann auftreten, wenn schwache Konsistenz verwendet wird. Indem Sie die Abfragekonsistenz auf affinitizedweakconsistencyfestlegen, können Sie schwache Konsistenzabfragen haben, die identisch sind, um denselben Abfragekopf zu finden und damit die Cachetrefferrate zu erhöhen.

Verwaltung

Die folgenden Verwaltungs- und Observability-Befehle werden unterstützt:

  • Abfrageergebniscache anzeigen: Gibt Statistiken im Zusammenhang mit dem Abfrageergebniscache zurück.
  • Cache für Abfrageergebnisse löschen: Löscht den Cache für Abfrageergebnisse.
  • Aktualisierung des Abfragecacheeintrags: Ein bestimmter Abfragecacheeintrag kann mithilfe query_results_cache_force_refresh der Clientanforderungseigenschaft OptionQueryResultsCacheForceRefresh aktualisiert werden. Wenn dieser Befehl auf true festgelegt ist, wird erzwingen, dass der Abfrageergebnissecache auch aktualisiert wird, wenn ein vorhandener Cache vorhanden ist. Dieser Vorgang ist in Szenarien hilfreich, in denen Abfragen ergebnisse für abfragen verfügbar sind. Diese Eigenschaft muss in Kombination mit "query_results_cache_max_age" verwendet und über das ClientRequestProperties-Objekt gesendet werden. Die Eigenschaft kann nicht Teil einer 'set'-Anweisung sein.

Capacity

Die Cachekapazität ist derzeit auf 1 GB pro Clusterknoten festgelegt. Die Eviction-Richtlinie ist LRU.

Cache für Abfrageergebnisse auf Shardebene

Sie können den Cache für Abfrageergebnisse auf Shardebene für Szenarien verwenden, für die die aktuellsten Ergebnisse erforderlich sind, z. B. ein Live-Dashboard. Beispielsweise kann eine Abfrage, die alle 10 Sekunden ausgeführt wird und die letzte 1 Stunde umfasst, von der Zwischenspeicherung von Zwischenabfrageergebnissen auf Speicherebene (Shard) profitieren.

Der Cache der Abfrageergebnisse aufHardebene wird automatisch aktiviert, wenn die Query results cache Abfrage verwendet wird. Da sie denselben Cache Query results cachewie verwendet, gelten die gleichen Kapazitäts- und Äumungsrichtlinien.

Syntax

setquery_results_cache_per_shard; Frage

Hinweis

Diese Option kann im Abfragetext oder als Clientanforderungseigenschaft festgelegt werden.

Erfahren Sie mehr über Syntaxkonventionen.

Beispiel

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