Cache dei risultati della query
Si applica a: ✅Microsoft Fabric✅Azure Esplora dati✅ Azure Monitor✅Microsoft Sentinel
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:
- ClientRequestId
- Applicazione
- Utente
Query incompatibili
I risultati della query non verranno memorizzati nella cache se una delle condizioni seguenti è vera:
- La query fa riferimento a una tabella con i criteri RestrictedViewAccess abilitati.
- La query fa riferimento a una tabella con i criteri RowLevelSecurity abilitati.
- La query usa una delle funzioni seguenti:
- La query accede a una tabella esterna o a dati esterni.
- La query usa l'operatore evaluate plugin .
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 stringaServerCache
- 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 sutrue
, 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'.
Capacity
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
È possibile usare la cache dei risultati delle query a livello di partizione per scenari che richiedono i risultati più aggiornati, ad esempio un dashboard attivo. 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
set
query_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