Condividi tramite


Cache dei risultati della query

Kusto include una cache dei risultati della query. È possibile scegliere di ottenere risultati memorizzati nella cache durante l'esecuzione di una query. Se i risultati della query possono essere restituiti dalla cache, si otterranno prestazioni migliori e un consumo di risorse inferiore. Tuttavia, queste prestazioni si comportano a scapito di un certo "decadimento" nei risultati.

Usare la cache

Impostare l'opzione query_results_cache_max_age come parte della query per usare la 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 valore timespan che indica la "validità" massima della cache dei risultati, misurata dall'ora di inizio della query. Oltre all'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:

  • Le due query hanno la stessa rappresentazione (come le stringhe UTF-8).
  • Le due query vengono eseguite nello stesso database.
  • Le due query condividono le stesse proprietà della richiesta client. Le proprietà seguenti vengono ignorate a scopo di memorizzazione nella cache:

Query incompatibili

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

Nessuna voce di cache valida

Se non è stato possibile trovare un risultato memorizzato nella cache che soddisfa i vincoli di tempo o 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 i 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 Key colonna e una Value 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 Value riga conterrà un contenitore delle 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 ha una cache dedicata nella propria risorsa di archiviazione privata. Se due query identiche vengono eseguite su nodi diversi, la query verrà eseguita e memorizzata nella cache in entrambi i nodi. Questo processo può verificarsi se viene usata la coerenza debole. Impostando la coerenza delle query su affinitizedweakconsistency, è possibile avere query di coerenza debole identiche nella stessa intestazione di query e quindi aumentare la frequenza di riscontri nella cache.

Gestione

Sono supportati i comandi di gestione e osservabilità seguenti:

  • Mostra cache dei risultati della query: restituisce statistiche correlate alla cache dei risultati della query.
  • Cancella la cache dei risultati della query: cancella la cache dei risultati della query.
  • Aggiorna la voce della cache delle query: è possibile aggiornare una voce specifica della cache di query 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 l'esecuzione di query. Questa proprietà deve essere utilizzata 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 rapida successione e può tollerare la restituzione di dati leggermente obsoleti. Tuttavia, alcuni scenari, ad esempio un dashboard live, richiedono i risultati più aggiornati.

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

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

Sintassi

setquery_results_cache_per_shard; Quesito

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