Sdílet prostřednictvím


Mezipaměť výsledků dotazu

Platí pro: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

Kusto obsahuje mezipaměť výsledků dotazu. Při vydávání dotazu můžete získat výsledky uložené v mezipaměti. Pokud může mezipaměť vrátit výsledky dotazu, dosáhnete lepšího výkonu dotazů a nižší spotřeby prostředků. Tento výkon ale připadá na úkor nějaké "neagrese" ve výsledcích.

Použití mezipaměti

query_results_cache_max_age Nastavte možnost jako součást dotazu tak, aby používala mezipaměť výsledků dotazu. Tuto možnost můžete nastavit v textu dotazu nebo jako vlastnost požadavku klienta. Příklad:

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

Hodnota možnosti je timespan hodnota, která označuje maximální stáří mezipaměti výsledků měřenou od času spuštění dotazu. Kromě nastaveného časového rozsahu je položka mezipaměti zastaralá a nebude se znovu používat. Nastavení hodnoty 0 odpovídá tomu, že možnost nenastavíte.

Kompatibilita mezi dotazy

Identické dotazy

Mezipaměť výsledků dotazu vrátí výsledky pouze pro dotazy, které jsou považovány za "identické" s předchozím dotazem v mezipaměti. Pokud jsou splněny všechny následující podmínky, považují se za identické dva dotazy:

  • Oba dotazy mají stejnou reprezentaci (jako řetězce UTF-8).
  • Dva dotazy se provádějí ve stejné databázi.
  • Dva dotazy sdílejí stejné vlastnosti požadavku klienta. Pro účely ukládání do mezipaměti se ignorují následující vlastnosti:
    • ClientRequestId
    • Aplikace
    • Uživatelská

Nekompatibilní dotazy

Výsledky dotazu nebudou uloženy do mezipaměti, pokud platí některá z následujících podmínek:

Žádná platná položka mezipaměti

Pokud se nepodařilo najít výsledek uložený v mezipaměti, který splňuje časová omezení nebo neexistuje výsledek dotazu v mezipaměti z "identického" dotazu, spustí se dotaz a jeho výsledky se uloží do mezipaměti, pokud:

  • Provádění dotazu se úspěšně dokončilo a
  • Velikost výsledků dotazu nepřesahuje 16 MB.

Výsledky z mezipaměti

Jak služba indikuje, že výsledky dotazu se obsluhují z mezipaměti? Při odpovídání na dotaz odešle Kusto další tabulku odpovědí ExtendedProperties , která obsahuje Key sloupec a Value sloupec. Výsledky dotazu v mezipaměti budou mít k této tabulce připojený další řádek:

  • Sloupec řádku Key bude obsahovat řetězec. ServerCache
  • Sloupec řádku Value bude obsahovat tašku vlastností se dvěma poli:
    • OriginalClientRequestId– Určuje ClientRequestId původního požadavku.
    • OriginalStartedOn – Určuje počáteční čas spuštění původního požadavku.

Distribuce

Mezipaměť nesdílí uzly clusteru. Každý uzel má vyhrazenou mezipaměť ve vlastním privátním úložišti. Pokud na různých uzlech přistanou dva identické dotazy, dotaz se spustí a uloží do mezipaměti na obou uzlech. K tomuto procesu může dojít, pokud se použije slabá konzistence . Nastavením konzistence dotazů můžete mít slabě konzistenci affinitizedweakconsistencydotazů, které jsou identické na stejné hlavině dotazů, a tím zvýšit rychlost dosažení mezipaměti.

Správa

Podporují se následující příkazy pro správu a pozorovatelnost:

  • Zobrazit mezipaměť výsledků dotazu: Vrátí statistiky související s mezipamětí výsledků dotazu.
  • Vymazat mezipaměť výsledků dotazu: Vymaže mezipaměť výsledků dotazu.
  • Položka mezipaměti dotazu aktualizace: Konkrétní položku mezipaměti dotazu lze aktualizovat pomocí query_results_cache_force_refresh vlastnosti požadavku klienta (OptionQueryResultsCacheForceRefresh). Pokud je tato možnost nastavená, truetento příkaz vynutí aktualizaci mezipaměti výsledků dotazu také v případě, že existuje existující mezipaměť. Tento proces je užitečný ve scénářích, které vyžadují, aby byly k dispozici výsledky dotazů pro dotazování. Tato vlastnost musí být použita v kombinaci s "query_results_cache_max_age" a odeslána prostřednictvím ClientRequestProperties objektu. Vlastnost nemůže být součástí příkazu set.

Kapacita

Kapacita mezipaměti je aktuálně pevná na 1 GB na uzel clusteru. Zásada vyřazení je LRU.

Mezipaměť výsledků dotazu na úrovni horizontálních oddílů

Mezipaměť výsledků dotazů na úrovni horizontálních oddílů můžete použít pro scénáře, které vyžadují nejaktuálnější výsledky, jako je živý řídicí panel. Například dotaz, který se spouští každých 10 sekund a zahrnuje posledních 1 hodinu, může těžit z ukládání výsledků mezilehlých dotazů na úrovni úložiště (horizontálních oddílů).

Mezipaměť výsledků dotazu na úrovni horizontálních oddílů se automaticky povolí, když Query results cache se používá. Protože sdílí stejnou mezipaměť jako Query results cache, platí stejné zásady kapacity a vyřazení.

Syntaxe

setquery_results_cache_per_shard; Dotaz

Poznámka:

Tuto možnost lze nastavit v textu dotazu nebo jako vlastnost požadavku klienta.

Přečtěte si další informace o konvencích syntaxe.

Příklad

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