Abfrageergebniscache

Kusto enthält einen Cache für Abfrageergebnisse. Sie können beim Ausgeben einer Abfrage zwischengespeicherte Ergebnisse abrufen. Sie erzielen eine bessere Abfrageleistung und einen geringeren Ressourcenverbrauch, wenn die Ergebnisse Ihrer Abfrage vom Cache zurückgegeben werden können. Diese Leistung geht jedoch auf Kosten einer gewissen "Veraltung" in den Ergebnissen.

Verwenden des Caches

Legen Sie die query_results_cache_max_age Option als Teil der Abfrage fest, um den Cache der Abfrageergebnisse zu verwenden. Sie können diese Option im Abfragetext oder als Clientanforderungseigenschaft festlegen. 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 an der Startzeit der Abfrage. Über den festgelegten Zeitraum 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 Cache der Abfrageergebnisse gibt ergebnisse nur für Abfragen zurück, die als "identisch" mit einer vorherigen zwischengespeicherten Abfrage gelten. Zwei Abfragen gelten als identisch, wenn alle der folgenden Bedingungen erfüllt sind:

  • Die beiden Abfragen haben dieselbe Darstellung (wie UTF-8-Zeichenfolgen).
  • Die beiden Abfragen werden an dieselbe Datenbank gestellt.
  • Die beiden Abfragen verwenden dieselben Clientanforderungseigenschaften. Die folgenden Eigenschaften werden zu Zwischenspeicherungszwecken ignoriert:

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 kein zwischengespeichertes Ergebnis einer "identischen" Abfrage im Cache vorhanden ist, wird die Abfrage ausgeführt und ihre Ergebnisse zwischengespeichert, sofern:

  • Die Abfrageausführung wird 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? Beim Antworten auf eine Abfrage sendet Kusto eine weitere ExtendedProperties-Antworttabelle , die eine Key Spalte und eine Value Spalte enthält. Bei zwischengespeicherten Abfrageergebnissen wird 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 Startzeit der ursprünglichen Anforderung an.

Distribution

Der Cache wird nicht von Clusterknoten freigegeben. Jeder Knoten verfügt über einen dedizierten Cache in seinem eigenen privaten Speicher. Wenn zwei identische Abfragen auf unterschiedlichen Knoten landen, wird die Abfrage ausgeführt und auf beiden Knoten zwischengespeichert. Dieser Prozess kann auftreten, wenn eine schwache Konsistenz verwendet wird. Durch Festlegen der Abfragekonsistenz auf affinitizedweakconsistencykönnen Sie schwache Konsistenzabfragen, die identisch sind, auf demselben Abfragekopf landen und so die Trefferrate für den Cache erhöhen.

Verwaltung

Die folgenden Verwaltungs- und Beobachtbarkeitsbefehle werden unterstützt:

  • Cache für Abfrageergebnisse anzeigen: Gibt Statistiken im Zusammenhang mit dem Cache für Abfrageergebnisse zurück.
  • Cache für Abfrageergebnisse löschen: Löscht den Cache der Abfrageergebnisse.
  • Abfragecacheeintrag aktualisieren: Ein bestimmter Abfragecacheeintrag kann mithilfe der query_results_cache_force_refreshClientanforderungseigenschaft (OptionQueryResultsCacheForceRefresh) aktualisiert werden. Wenn auf truefestgelegt ist, erzwingt dieser Befehl, dass der Cache für Abfrageergebnisse auch aktualisiert wird, wenn ein vorhandener Cache vorhanden ist. Dieser Prozess ist in Szenarien nützlich, in denen abfragende Ergebnisse verfügbar sein müssen. 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 Räumungsrichtlinie ist LRU.

Abfrageergebniscache auf Shardebene

Der Cache der Abfrageergebnisse ist effektiv, wenn dieselbe Abfrage mehrmals in schneller Folge ausgeführt wird und leicht alte Daten zurückgegeben werden können. Einige Szenarien, z. B. ein Live-Dashboard, erfordern jedoch die aktuellsten Ergebnisse.

Beispielsweise kann eine Abfrage, die alle 10 Sekunden ausgeführt wird und die letzte 1 Stunde umfasst, vom Zwischenspeichern von Abfrageergebnissen auf Speicherebene (Shard) profitieren.

Der Abfrageergebniscache auf Shardebene wird automatisch aktiviert, wenn der Query results cache verwendet wird. Da sie denselben Cache wie Query results cacheverwendet, gelten dieselben Kapazitäts- und Entfernungsrichtlinien.

Syntax

setquery_results_cache_per_shard; Abfrage

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