Condividi tramite


Memorizzazione nella cache dei set di risultati (anteprima)

Si applica a:✅ endpoint di analisi SQL e magazzino dati in Microsoft Fabric

La memorizzazione nella cache dei set di risultati (anteprima) è un'ottimizzazione predefinita delle prestazioni per gli endpoint di analisi SQL di Fabric Data Warehouse e Lakehouse che migliorano la latenza di lettura.

La memorizzazione nella cache dei set di risultati funziona salvando in modo permanente i set di risultati finali per le query T-SQL applicabili SELECT , in modo che le esecuzioni successive che "hit" cache elaboreranno solo il set di risultati finale. Ciò può ignorare la compilazione complessa e l'elaborazione dei dati della query originale e restituire le query successive più velocemente.

Gli scenari di data warehousing in genere comportano query analitiche che elaborano grandi quantità di dati per produrre un risultato relativamente piccolo. Ad esempio, una SELECT query che contiene più join ed esegue letture e riordini su milioni di righe di dati può comportare un'aggregazione che è lunga solo poche righe. Per carichi di lavoro come report o dashboard che tendono a attivare ripetutamente le stesse query analitiche, è possibile attivare più volte lo stesso calcolo pesante, anche se il risultato finale rimane invariato. La memorizzazione nella cache dei set di risultati migliora le prestazioni in questi scenari e simili per circa lo stesso costo.

Importante

Questa funzionalità si trova in Anteprima.

Gestione automatica della cache

La cache dei set di risultati funziona in modo trasparente. Dopo l'abilitazione, la creazione e il riutilizzo della cache vengono applicati opportunisticamente per le query.

La memorizzazione nella cache dei set di risultati si applica alle query T-SQL nelle tabelle del magazzino dati, alle scorciatoie verso le origini OneLake e alle scorciatoie verso origini non Azure. La gestione della cache viene gestita automaticamente, rimuovendo regolarmente la cache in base alle esigenze.

Inoltre, man mano che i dati cambiano, la coerenza dei risultati viene garantita invalidando la cache creata in precedenza.

Configurare la memorizzazione nella cache dei set di risultati

La memorizzazione nella cache dei set di risultati è configurabile a livello di elemento.

Dopo l'abilitazione, può essere disabilitata a livello di elemento o per le singole query, se necessario.

Durante l'anteprima, la memorizzazione nella cache dei set di risultati è disattivata per impostazione predefinita per tutti gli elementi.

Configurazione a livello di elemento

Usare il comando T-SQL ALTER DATABASE SET per abilitare la memorizzazione nella cache dei set di risultati per un lakehouse o warehouse. Usare l'endpoint di analisi SQL di un Lakehouse per connettersi ed eseguire query T-SQL.

ALTER DATABASE <Fabric_item_name>
SET RESULT_SET_CACHING ON;

Il valore dell'impostazione può essere controllato in sys.databases, ad esempio per visualizzare il valore per il contesto corrente in Fabric Warehouse o all'endpoint di analisi SQL Lakehouse.

SELECT name, is_result_set_caching_on 
FROM sys.databases
WHERE database_id = db_id();

Per disabilitare la memorizzazione nella cache dei set di risultati:

ALTER DATABASE <Fabric_item_name>
SET RESULT_SET_CACHING OFF;

Configurazione a livello di query

Una volta abilitata la memorizzazione nella cache dei set di risultati in un elemento, può essere disabilitata per una singola query.

Può essere utile per il debug o il test A/B di una query. Disabilitare la memorizzazione nella cache dei set di risultati per una query collegando questo hint alla fine di SELECT:

OPTION ( USE HINT ('DISABLE_RESULT_SET_CACHE') );

Controllare l'utilizzo della cache dei set di risultati

L'utilizzo della cache dei set di risultati può essere controllato in due posizioni: Output dei messaggi e vista di sistema queryinsights.exec_requests_history.

Nell'output del messaggio di una query (visibile nell'editor di query di Fabric o in SQL Server Management Studio), l'istruzione "La cache del set di risultati è stata usata" verrà visualizzata dopo l'esecuzione della query se la query è stata in grado di usare una cache del set di risultati esistente.

Screenshot dei risultati di una query che mostra che è stata usata la memorizzazione nella cache del set di risultati.

In queryinsights.exec_requests_history la colonna result_cache_hit visualizza un valore che indica l'utilizzo della cache dei set di risultati per ogni esecuzione della query:

  • 2: la query ha usato la cache del set di risultati (riscontri nella cache)
  • 1: la query ha creato la cache del set di risultati
  • 0: la query non è applicabile per la creazione o l'utilizzo della cache del set di risultati

Per esempio:

SELECT result_cache_hit, command, *
FROM queryinsights.exec_requests_history
ORDER BY submit_time DESC;

Screenshot dell'editor di query di Fabric che mostra una query nella vista queryinsights.exec_requests_history.

Idoneo per la memorizzazione nella cache dei set di risultati

Quando viene eseguita una SELECT query, viene valutata per la memorizzazione nella cache dei set di risultati. Per la creazione e l'uso della cache dei set di risultati, è necessario soddisfare diversi requisiti. Alcuni di questi consentono di mantenere l'archiviazione nella cache ai limiti interni, alcune consentono di riservare la memorizzazione nella cache per query complesse e altre consentono di mantenere la correttezza dei risultati in caso di riscontri ripetitivi. Un esempio ovvio consiste nel limitare le query SELECT con GETDATE() di essere memorizzate nella cache, ma esistono anche altri casi complessi in cui Fabric decide di non memorizzare nella cache i risultati.

L'elenco seguente contiene le disqualificazioni comuni per la memorizzazione nella cache dei set di risultati in Fabric Data Warehouse. Se una query non è applicabile per la creazione della cache dei set di risultati, potrebbe essere dovuta a uno o più di questi motivi:

  • La memorizzazione nella cache dei set di risultati non è abilitata nell'elemento attualmente connesso o è abilitata nell'elemento, ma la query include l'hint DISABLE_RESULT_SET_CACHE
  • La query non è pura SELECT, ad esempio ( CREATE TABLE AS SELECT CTAS), SELECT-INTO, altro linguaggio di modifica dei dati
  • La query fa riferimento a un oggetto di sistema, a una tabella temporanea, a una funzione di metadati o non fa riferimento ad alcun oggetto distribuito
  • La query non fa riferimento ad almeno una tabella di almeno 100.000 righe
  • La query fa riferimento a un oggetto esterno all'elemento Fabric attualmente connesso (ad esempio, una query tra database)
  • La query si trova all'interno di una transazione esplicita o di un WHILE ciclo
  • L'output della query contiene un tipo di dati non supportato e/o il VARCHAR(MAX) tipo di dati e/o il VARBINARY(MAX) tipo di dati. Per i tipi di dati supportati, vedere Tipi di dati in Data Warehouse di Fabric
  • La query contiene un CAST o CONVERT con un riferimento a date oppure al tipo di dati sql_variant
  • La query contiene costanti di runtime ( ad esempio CURRENT_USER o GETDATE())
  • Il risultato della query è stimato come > 10.000 righe
  • La query contiene funzioni predefinite non deterministiche, funzioni di aggregazione delle finestre o funzioni ordinate come PARTITION BY … ORDER BY. Vedere Funzioni deterministiche e non deterministiche.
  • La query usa la maschera dati dinamica, la sicurezza a livello di riga o altre funzionalità di sicurezza
  • La query usa il tempo di spostamento
  • La query applica ORDER BY a una colonna o a un'espressione non inclusa nell'output della query
  • La query si trova in una sessione con istruzioni di livello sessione SET che hanno valori non predefiniti (ad esempio, impostando QUOTED_IDENTIFIER su OFF).
  • Il sistema ha raggiunto i limiti interni per la cache. I processi di rimozione della cache in background liberano spazio prima della creazione della nuova cache.

Queste regole si applicano anche al riutilizzo della cache nelle esecuzioni successive della stessa query. Inoltre, una cache potrebbe non essere usata negli scenari seguenti:

  • Qualsiasi modifica alle tabelle a cui si fa riferimento dopo la creazione della cache
  • L'ambiente di lavoro è offline sin dalla creazione di una cache, simile alla memorizzazione nella cache in memoria e su disco
  • L'utente non dispone di autorizzazioni sufficienti per gli oggetti nella query
  • La query viene chiamata da una connessione di lakehouse o warehouse diversa da quella in cui è stata eseguita la query originale. Le query tra database non sono idonee per la memorizzazione nella cache dei set di risultati.
  • La query usa colonne di output, ordinamento delle colonne o alias diversi rispetto alla query originale
  • La query memorizzata nella cache non è stata usata in 24 ore

Annotazioni

Poiché queste qualifiche vengono valutate internamente per la migliore applicazione della memorizzazione nella cache dei set di risultati, è importante tenere presente che potrebbero essere aggiornate in futuro.