Mezipaměť výsledků dotazu
Platí pro: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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:
- Dotaz odkazuje na tabulku s povolenou zásadou RestrictedViewAccess .
- Dotaz odkazuje na tabulku s povolenou zásadou RowLevelSecurity .
- Dotaz používá některou z následujících funkcí:
- Dotaz přistupuje k externí tabulce nebo externím datům.
- Dotaz používá operátor modulu plug-in evaluate.
Žá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 affinitizedweakconsistency
dotazů, 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á,true
tento 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
set
query_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