Panoramica dello strumento di ottimizzazione delle query

Questa pagina descrive lo strumento di ottimizzazione delle query Spanner e i suoi vantaggi.

Panoramica

Lo strumento di ottimizzazione di query SQL di Spanner converte un'istruzione SQL dichiarativa, che descrive i dati richiesti dalla query, in un piano di esecuzione imperativo, che descrive un modo per ottenere con precisione questi dati. Il processo di trasformazione di un'istruzione dichiarativa in un piano di esecuzione delle query prevede l'esecuzione di trasformazioni in strutture ad albero utilizzate per rappresentare la query. Nel processo di creazione di un piano di esecuzione, l'ottimizzatore conserva il significato logico della query SQL originale, in modo che vengano restituite le righe corrette.

Un altro ruolo importante dell'ottimizzatore è produrre un piano di esecuzione efficiente.

In che modo l'ottimizzatore di Spanner produce piani di esecuzione efficienti?

L'ottimizzatore di Spanner utilizza una combinazione di euristiche comprovate e ottimizzazione basata sui costi per creare piani efficienti. Alcune euristiche sono molto semplici, come "esegui filtri su macchine remote anziché estrarre dati dalla macchina locale". Altre euristiche sono più complesse, ma incarnano il principio di spostamento della logica che riduce il volume dei dati. Questo principio è particolarmente importante in un sistema che esegue lo sharding dei dati su più macchine.

Non tutte le decisioni di esecuzione possono essere prese in modo efficace utilizzando queste regole fisse, pertanto l'ottimizzatore di Spanner prende decisioni in base a un costo stimato delle alternative. Le stime dei costi vengono calcolate utilizzando la struttura della query, lo schema del database e le stime del volume di dati che verrà prodotto dai frammenti della query. Ad esempio, Spanner calcolerà quante righe della tabella Brani qualificano il filtro SongGenre = "Country" se questo filtro compare in una query. Per facilitare il calcolo di queste stime, Spanner raccoglie periodicamente statistiche per caratterizzare la distribuzione dei dati in un database.

Inoltre, Spanner ottimizza l'esecuzione delle query determinando automaticamente se per la query è necessario utilizzare un metodo di elaborazione orientato alle righe o alle colonne. Per saperne di più, consulta Ottimizza le scansioni.

Per scoprire di più sui piani di esecuzione delle query e su come vengono utilizzati da Spanner per eseguire query in un ambiente distribuito, consulta Piani di esecuzione delle query.

Controllo delle versioni dello strumento di ottimizzazione delle query

Nel tempo, lo strumento di ottimizzazione di query di Spanner si evolverà, ampliando il set di scelte nel piano di esecuzione delle query e migliorando l'accuratezza delle stime alla base di queste scelte, portando a piani di esecuzione delle query più efficienti.

Spanner rilascia gli aggiornamenti dell'ottimizzatore come nuove versioni dello strumento di ottimizzazione delle query per migliorare l'efficienza dei piani di esecuzione delle query. Per scoprire di più sulle diverse versioni, consulta la pagina relativa alle versioni dello strumento di ottimizzazione delle query di Spanner.

Pacchetti di statistiche dello strumento di ottimizzazione delle query

Spanner gestisce statistiche sulla distribuzione dei dati delle colonne delle tabelle per aiutare a stimare il numero di righe che verranno generate da una query. Lo strumento per ottimizzare le query utilizza queste stime per scegliere il piano di esecuzione delle query migliore. Queste statistiche vengono aggiornate periodicamente da Spanner. Poiché le statistiche vengono utilizzate per scegliere i piani di esecuzione delle query, quando le statistiche vengono aggiornate, Spanner può modificare il piano di query utilizzato per una query.

Per impostazione predefinita, i database utilizzano automaticamente il pacchetto di statistiche più recente generato. Puoi bloccare il database a una versione precedente del pacchetto di statistiche. Puoi anche eseguire singole query con un pacchetto di statistiche diverso dal più recente.

Crea un nuovo pacchetto di statistiche

Spanner genera automaticamente un nuovo pacchetto di statistiche ogni tre giorni. Per creare manualmente un nuovo pacchetto di statistiche, utilizza l'istruzione DDL di GoogleSQL ANALYZE o l'istruzione DDL di PostgreSQL ANALYZE.

Dopo modifiche significative ai dati o allo schema del database, la creazione di un nuovo pacchetto di statistiche può migliorare le prestazioni delle query. Come best practice, crea un nuovo pacchetto di statistiche se si verifica quanto segue:

  • Il database elabora una grande quantità di inserti, aggiornamenti o eliminazioni.
  • Aggiungi un nuovo indice al database.
  • Aggiungi una nuova colonna a una tabella.

L'esecuzione di un'istruzione DDL ANALYZE aggiorna lo schema e avvia un' operazione a lunga esecuzione.

Al termine dell'esecuzione dell'istruzione, Spanner impiega fino a dieci minuti prima che lo strumento di ottimizzazione delle query tenga conto di un nuovo pacchetto di statistiche nella pianificazione delle query.

Garbage collection dei pacchetti di statistiche

I pacchetti di statistiche in Spanner vengono conservati per un periodo di 30 giorni dalla loro creazione, dopodiché sono soggetti a garbage collection.

La tabella Spanner integrata INFORMATION_SCHEMA.SPANNER_STATISTICS contiene un elenco dei pacchetti di statistiche disponibili. Ogni riga in questa tabella elenca un pacchetto di statistiche per nome e il nome contiene il timestamp di creazione del pacchetto specificato. Ogni voce contiene anche un campo chiamato ALLOW_GC che definisce se un pacchetto può essere garbage collection.

Puoi bloccare l'intero database su uno qualsiasi dei pacchetti elencati in quella tabella. Il pacchetto di statistiche fissato non verrà garbage collection e il valore di ALLOW_GC viene ignorato purché il database sia bloccato su questo pacchetto. Per utilizzare un determinato pacchetto di statistiche per una singola query, il pacchetto deve essere elencato con ALLOW_GC=FALSE o bloccato. In questo modo si evita che le query non vadano a buon fine dopo che il pacchetto delle statistiche è stato garbage collection. Puoi modificare il valore di ALLOW_GC utilizzando l'istruzione DDL di GoogleSQL ALTER STATISTICS o PostgreSQL ALTER STATISTICS.

Conservazione dei pacchi e informazioni che consentono l'identificazione personale (PII)

Un pacchetto di statistiche contiene istogrammi dei dati delle colonne, secondo una prassi standard del settore. Questo consente allo strumento di ottimizzazione delle query di selezionare i piani di query ottimali. L'istogramma viene creato utilizzando un piccolo campione di valori. Questo piccolo set di dati può potenzialmente contenere PII.

Spanner crea regolarmente un nuovo pacchetto di statistiche e lo conserva per 30 giorni per impostazione predefinita. Pertanto, un piccolo campione di valori eliminato dal database potrebbe essere conservato per altri 30 giorni negli istogrammi delle statistiche. I pacchetti di statistiche bloccati con l'opzione di database optimizer_statistics_package o i pacchetti con l'opzione ALLOW_GC=FALSE non verranno garbage collection. Gli istogrammi in questi pacchetti potrebbero contenere valori eliminati dal database per un periodo più lungo. Inoltre, i contenuti dei pacchetti di statistiche sono inclusi nei backup del database.

Le statistiche di ottimizzazione vengono memorizzate in modo criptato come i dati utente.

La quantità totale di spazio di archiviazione richiesta per questi pacchetti è generalmente inferiore a 100 MB e viene conteggiata nei costi di archiviazione totali.

Passaggi successivi