Mezipaměť výsledků dotazu
Kusto obsahuje mezipaměť výsledků dotazů. Při vydávání dotazu můžete získat výsledky uložené v mezipaměti. Pokud se výsledky dotazu můžou vracet z mezipaměti, dosáhnete lepšího výkonu dotazů a nižší spotřeby prostředků. Tento výkon však přichází na úkor určité "nesytosti" ve výsledcích.
Použití mezipaměti
query_results_cache_max_age
Nastavte možnost jako součást dotazu tak, aby se 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
která označuje maximální "stáří" mezipaměti výsledků měřené 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á nenastavování možnosti .
Kompatibilita mezi dotazy
Identické dotazy
Mezipaměť výsledků dotazu vrací výsledky pouze pro dotazy, které jsou považovány za identické s předchozím dotazem uloženým v mezipaměti. Dva dotazy se považují za identické, pokud jsou splněny všechny následující podmínky:
- Tyto dva dotazy mají stejnou reprezentaci (jako řetězce UTF-8).
- Tyto dva dotazy se provedou na stejnou databázi.
- Tyto dva dotazy sdílejí stejné vlastnosti požadavků klienta. Následující vlastnosti jsou ignorovány pro účely ukládání do mezipaměti:
Nekompatibilní dotazy
Výsledky dotazu se nebudou ukládat do mezipaměti, pokud platí některá z následujících podmínek:
- Dotaz odkazuje na tabulku, která má povolenou zásadu RestrictedViewAccess .
- Dotaz odkazuje na tabulku, která má povolenou zásadu 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 splňující časová omezení nebo pokud v mezipaměti není výsledek "identického" dotazu v mezipaměti, dotaz se spustí a výsledky se uloží do mezipaměti za předpokladu, že:
- Provádění dotazu se úspěšně dokončí a
- Velikost výsledků dotazu nepřesahuje 16 MB.
Výsledky z mezipaměti
Jak služba indikuje, že se výsledky dotazu obsluhují z mezipaměti?
Při odpovídání na dotaz kusto odešle 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 kontejner vlastností se dvěma poli:OriginalClientRequestId
– Určuje ClientRequestId původního požadavku.OriginalStartedOn
– Určuje počáteční čas provádění původního požadavku.
Distribuce
Mezipaměť se nesdílí mezi uzly clusteru. Každý uzel má ve svém vlastním privátním úložišti vyhrazenou mezipaměť. Pokud dva identické dotazy přijdou na různé uzly, dotaz se provede a uloží do mezipaměti na obou uzlech. K tomuto procesu může dojít při použití slabé konzistence . Nastavením konzistence dotazů na affinitizedweakconsistency
můžete mít slabě konzistenci dotazy, které jsou identické, přistane na stejné hlavině dotazů, a tím zvýšit rychlost přístupů do 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.
- Aktualizovat položku mezipaměti dotazů: Konkrétní položku mezipaměti dotazů je možné aktualizovat pomocí
query_results_cache_force_refresh
vlastnosti požadavku klienta (OptionQueryResultsCacheForceRefresh). Pokud je tato možnost nastavená natrue
, 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 pro dotazování byly k dispozici výsledky dotazů. Tato vlastnost musí být použita v kombinaci s "query_results_cache_max_age" a odeslána prostřednictvím objektu ClientRequestProperties. Vlastnost nemůže být součástí příkazu set.
Capacity
Kapacita mezipaměti je v současné době pevně nastavená na 1 GB na uzel clusteru. Zásada vyřazení je LRU.
Mezipaměť výsledků dotazu na úrovni horizontálního oddílu
Mezipaměť výsledků dotazu je účinná, když se stejný dotaz spustí vícekrát rychle za sebou a může tolerovat vrácení mírně starých dat. Některé scénáře, například živý řídicí panel, ale vyžadují nejaktuálnější výsledky.
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í průběžných výsledků dotazů do mezipaměti na úrovni úložiště (horizontálního oddílu).
Mezipaměť výsledků dotazu na úrovni horizontálního oddílu Query results cache
se automaticky povolí, když se používá. Protože sdílí stejnou mezipaměť jako Query results cache
, platí stejné zásady kapacity a vyřazení.
Syntax
set
query_results_cache_per_shard
; Dotazu
Poznámka
Tuto možnost můžete 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
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro