Condividi tramite


Cache dei risultati della query

Si applica a: ✅Microsoft Fabric

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:

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.

Coerenza delle query

Le query che usano di coerenza debole possono essere elaborate in nodi cluster diversi. La cache non è condivisa dai nodi del cluster, ogni nodo ha una cache dedicata nella propria risorsa di archiviazione privata. Pertanto, se due query identiche vengono eseguite su nodi diversi, la query verrà eseguita e memorizzata nella cache in entrambi i nodi. Impostando la coerenza delle query su affinitizedweakconsistency, è possibile assicurarsi che le query di coerenza deboli identiche si trovino nella stessa testa della query e quindi aumentano la frequenza di riscontri nella cache. Questo non è rilevante quando si usa coerenza assoluta.

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'.

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