Cache dei risultati della query

Kusto include una cache dei risultati della query. È possibile scegliere di ottenere risultati memorizzati nella cache durante l'emissione di una query. Si otterranno prestazioni di query migliori e consumo di risorse inferiore se i risultati della query possono essere restituiti dalla cache. Tuttavia, queste prestazioni vengono a spese di alcune "staleness" nei risultati.

Usare la cache

Impostare l'opzione come parte della query per usare la query_results_cache_max_age cache dei risultati della query. È possibile impostare questa opzione nel testo della query o come proprietà della richiesta client. Ad esempio:

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

Il valore dell'opzione è un timespan oggetto che indica l'età massima della cache dei risultati, misurata dall'ora di inizio della query. Oltre l'intervallo di tempo impostato, la voce della cache è obsoleta e non verrà usata di nuovo. L'impostazione di un valore pari a 0 equivale a non impostare l'opzione.

Compatibilità tra query

Query identiche

La cache dei risultati della query restituisce risultati solo per le query considerate "identiche" a una query memorizzata nella cache precedente. Due query vengono considerate identiche se vengono soddisfatte tutte le condizioni seguenti:

Query incompatibili

I risultati della query non verranno memorizzati nella cache se una delle condizioni seguenti è true:

Nessuna voce di cache valida

Se un risultato memorizzato nella cache soddisfa i vincoli di tempo non è stato trovato oppure non esiste un risultato memorizzato nella cache da una query "identica", la query verrà eseguita e i relativi risultati verranno memorizzati nella cache, purché:

  • L'esecuzione della query viene completata correttamente e
  • Le dimensioni dei risultati della query non superano 16 MB.

Risultati dalla cache

In che modo il servizio indica che i risultati della query vengono serviti dalla cache? Quando si risponde a una query, Kusto invia un'altra tabella di risposta ExtendedProperties che include una colonna e una KeyValue colonna. I risultati delle query memorizzati nella cache avranno un'altra riga aggiunta a tale tabella:

  • La colonna della Key riga conterrà la stringa ServerCache
  • La colonna della riga conterrà un contenitore di Value proprietà con due campi:
    • OriginalClientRequestId - Specifica il clientRequestId della richiesta originale.
    • OriginalStartedOn - Specifica l'ora di inizio dell'esecuzione della richiesta originale.

Distribuzione

La cache non è condivisa dai nodi del cluster. Ogni nodo dispone di una cache dedicata nella propria risorsa di archiviazione privata. Se due query identiche vengono eseguite in nodi diversi, la query verrà eseguita e memorizzata nella cache in entrambi i nodi. Questo processo può verificarsi se viene usata coerenza debole . Impostando la coerenza delle query su affinitizedweakconsistency, è possibile avere query di coerenza debole che sono identiche nella stessa testa di query e quindi aumentare la frequenza di hit rate della cache.

Gestione

Sono supportati i comandi di gestione e osservabilità seguenti:

  • Mostra cache dei risultati della query: restituisce le statistiche correlate alla cache dei risultati della query.
  • Cancella la cache dei risultati delle query: cancella la cache dei risultati delle query.
  • Voce della cache delle query di aggiornamento: è possibile aggiornare una voce di cache di query specifica usando query_results_cache_force_refresh (OptionQueryResultsCacheForceRefresh)proprietà della richiesta client. Se impostato su true, questo comando forza l'aggiornamento della cache dei risultati delle query anche quando è presente una cache esistente. Questo processo è utile negli scenari che richiedono che i risultati delle query siano disponibili per la query. Questa proprietà deve essere usata in combinazione con "query_results_cache_max_age" e inviata tramite l'oggetto ClientRequestProperties. La proprietà non può far parte di un'istruzione 'set'.

Capacità

La capacità della cache è attualmente fissa a 1 GB per nodo del cluster. Il criterio di rimozione è LRU.

Cache dei risultati delle query a livello di partizione

La cache dei risultati della query è efficace quando la stessa query viene eseguita più volte in successione rapida e può tollerare la restituzione di dati leggermente precedenti. Tuttavia, alcuni scenari, ad esempio un dashboard live, richiedono i risultati più aggiornati.

Ad esempio, una query che esegue ogni 10 secondi e si estende nell'ultima ora può trarre vantaggio dalla memorizzazione nella cache dei risultati delle query intermedie a livello di archiviazione (partizione).

La cache dei risultati della query a livello di partizione viene abilitata automaticamente quando l'oggetto Query results cache è in uso. Poiché condivide la stessa cache di Query results cache, vengono applicati gli stessi criteri di rimozione e capacità.

Sintassi

setquery_results_cache_per_shard; Query

Nota

Questa opzione può essere impostata nel testo della query o come proprietà della richiesta client.

Altre informazioni sulle convenzioni di sintassi.

Esempio

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