Abfrageergebniscache
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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:
- Die Abfrage verweist auf eine Tabelle, die die RestrictedViewAccess-Richtlinie aktiviert hat.
- Die Abfrage verweist auf eine Tabelle, in der die RowLevelSecurity-Richtlinie aktiviert ist.
- Die Abfrage verwendet eine der folgenden Funktionen:
- Die Abfrage greift auf eine externe Tabelle oder auf externe Daten zu.
- Die Abfrage verwendet den Operator zum Auswerten des Plug-Ins .
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 affinitizedweakconsistency
festlegen, 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 auftrue
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 cache
wie verwendet, gelten die gleichen Kapazitäts- und Äumungsrichtlinien.
Syntax
set
query_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