Dela via


Cacheminne med frågeresultat

Kusto innehåller en cache för frågeresultat. Du kan välja att hämta cachelagrade resultat när du utfärdar en fråga. Du får bättre frågeprestanda och lägre resursförbrukning om frågans resultat kan returneras av cachen. Den här prestandan sker dock på bekostnad av viss "inaktuellhet" i resultatet.

Använd cachen

Ange alternativet query_results_cache_max_age som en del av frågan för att använda frågeresultatets cacheminne. Du kan ange det här alternativet i frågetexten eller som en klientförfrågningsegenskap. Exempel:

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

Alternativvärdet är ett timespan som anger den maximala "åldern" för resultatcachen, mätt från frågans starttid. Utöver det angivna tidsintervallet är cacheposten föråldrad och kommer inte att användas igen. Att ange värdet 0 motsvarar att inte ange alternativet.

Kompatibilitet mellan frågor

Identiska frågor

Cachen för frågeresultat returnerar endast resultat för frågor som anses vara "identiska" med en tidigare cachelagrad fråga. Två frågor anses vara identiska om alla följande villkor uppfylls:

Inkompatibla frågor

Frågeresultatet cachelagras inte om något av följande villkor är sant:

Ingen giltig cachepost

Om ett cachelagrat resultat som uppfyller tidsbegränsningarna inte kunde hittas, eller om det inte finns ett cachelagrat resultat från en "identisk" fråga i cachen, körs frågan och dess resultat cachelagras, så länge:

  • Frågekörningen har slutförts och
  • Frågeresultatets storlek överskrider inte 16 MB.

Resultat från cachen

Hur anger tjänsten att frågeresultaten hanteras från cacheminnet? När kusto svarar på en fråga skickar den en annan ExtendedProperties-svarstabell som innehåller en Key kolumn och en Value kolumn. Cachelagrade frågeresultat får ytterligare en rad i tabellen:

  • Radens Key kolumn innehåller strängen ServerCache
  • Radens kolumn innehåller en egenskapsuppsättning Value med två fält:
    • OriginalClientRequestId – Anger den ursprungliga begärans ClientRequestId.
    • OriginalStartedOn – Anger den ursprungliga begärans körningsstarttid.

Distribution

Cachen delas inte av klusternoder. Varje nod har en dedikerad cache i sin egen privata lagring. Om två identiska frågor hamnar på olika noder körs och cachelagras frågan på båda noderna. Den här processen kan inträffa om svag konsekvens används. Genom att ange frågekonsekvens till affinitizedweakconsistencykan du ha frågor med svag konsekvens som är identiska på samma frågehuvud och därmed öka träfffrekvensen för cachen.

Hantering

Följande hanterings- och observerbarhetskommandon stöds:

  • Visa cacheminne för frågeresultat: Returnerar statistik relaterad till cacheminnet för frågeresultat.
  • Rensa cacheminnet för frågeresultat: Rensar cacheminnet för frågeresultat.
  • Uppdatera frågans cachepost: en specifik frågecachepost kan uppdateras med hjälp av query_results_cache_force_refreshklientförfrågansegenskapen (OptionQueryResultsCacheForceRefresh). När det här kommandot är inställt på trueframtvingar det här kommandot att cacheminnet för frågeresultat uppdateras även när en befintlig cache finns. Den här processen är användbar i scenarier som kräver att frågeresultat är tillgängliga för frågor. Den här egenskapen måste användas i kombination med "query_results_cache_max_age" och skickas via ClientRequestProperties-objektet. Egenskapen får inte ingå i en set-instruktion.

Kapacitet

Cachekapaciteten är för närvarande fast vid 1 GB per klusternod. Borttagningsprincipen är LRU.

Cacheminne för frågeresultat på horisontell nivå

Cacheminnet för frågeresultat är effektivt när exakt samma fråga körs flera gånger i snabb följd och kan tolerera att lite gamla data returneras. Vissa scenarier, till exempel en live-instrumentpanel, kräver dock de senaste resultaten.

Till exempel kan en fråga som körs var tionde sekund och sträcker sig över den senaste 1 timmen dra nytta av cachelagring av mellanliggande frågeresultat på lagringsnivå (shard).

Cachen för frågeresultat på shardnivå aktiveras automatiskt när den Query results cache används. Eftersom den delar samma cache som Query results cachegäller samma kapacitets- och borttagningsprinciper.

Syntax

setquery_results_cache_per_shard; Fråga

Anteckning

Det här alternativet kan anges i frågetexten eller som en klientförfrågningsegenskap.

Läs mer om syntaxkonventioner.

Exempel

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