Panoramica dello strumento di ottimizzazione delle query

Questa pagina descrive l'ottimizzatore delle query di Spanner e i relativi vantaggi. L'ottimizzatore delle query è disponibile per i database con dialetto Google SQL e per i database con dialetto PostgreSQL.

Panoramica

L'ottimizzatore delle query SQL di Spanner converte un'istruzione SQL declarative, 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 della query prevede l'esecuzione di trasformazioni alle strutture ad albero utilizzate per rappresentare la query. Durante la produzione di un piano di esecuzione, l'ottimizzatore conserva il significato logico della query SQL originale in modo da restituire 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 procedure di ottimizzazione basate su costi e heuristic ben consolidate per produrre piani efficienti. Alcune heuristic sono molto semplici, ad esempio "esegui filtri sulle macchine remote anziché estrarre i dati sulla macchina locale". Altre strategie di euristica sono più complesse, ma incarnano comunque il principio della logica di spostamento che riduce il volume di dati più vicino ai dati. Questo principio è particolarmente importante in un sistema che suddivide i 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 anche in base a un costo stimato delle alternative. Queste stime dei costi vengono calcolate utilizzando la struttura della query, lo schema del database e le stime del volume di dati che verranno prodotti dai frammenti della query. Ad esempio, Spanner stima quante righe della tabella Songs soddisfano il filtroSongGenre = "Country" se questo filtro viene visualizzato 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 deve essere utilizzato un metodo di elaborazione orientato a righe o colonne. Per ulteriori informazioni, consulta Ottimizzare 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, l'ottimizzatore delle query di Spanner si evolverà, ampliando l'insieme di scelte nel piano di esecuzione delle query e migliorando l'accuratezza delle stime che informano queste scelte, il che si traduce in piani di esecuzione delle query più efficienti.

Spanner rilascia aggiornamenti dello strumento di ottimizzazione sotto forma di nuove versioni per migliorare l'efficienza dei suoi piani di esecuzione delle query. Per saperne di più sulle diverse versioni, consulta Versioni dello strumento di ottimizzazione delle query di Spanner.

Pacchetti di statistiche dello strumento di ottimizzazione delle query

Spanner mantiene statistiche sulla distribuzione dei dati delle colonne della tabella per contribuire a stimare quante righe verranno prodotte da una query. L'ottimizzatore delle query utilizza queste stime per aiutarti a 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 vengono aggiornate, Spanner può modificare il piano di query utilizzato per una query.

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

Creare 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 ANALYZE di GoogleSQL o l'istruzione DDL ANALYZE di PostgreSQL.

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 verificano le seguenti condizioni:

  • Il database elabora una grande quantità di inserimenti, 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, avvia un'operazione a lunga esecuzione e annulla la creazione di eventuali statistiche attivate automaticamente.

Una volta completata l'esecuzione dell'istruzione da parte di Spanner, sono necessari fino a dieci minuti affinché l'ottimizzatore 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 alla raccolta dei rifiuti.

La tabella INFORMATION_SCHEMA.SPANNER_STATISTICS incorporata di Spanner contiene un elenco dei pacchetti di statistiche disponibili. Ogni riga di questa tabella elenca un pacchetto di statistiche per nome e il nome contiene il timestamp di creazione del pacchetto in questione. Ogni voce contiene anche un campo denominato ALLOW_GC che definisce se un pacchetto può essere sottoposto a garbage collection o meno.

Puoi bloccare l'intero database su uno dei pacchetti elencati in quella tabella. Il pacchetto di statistiche bloccato non verrà sottoposto a garbage collection e il valore di ALLOW_GC viene ignorato finché il database è 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 la raccolta dei rifiuti del pacchetto di statistiche. Puoi modificare il valore di ALLOW_GC utilizzando l'istruzione DDL ALTER STATISTICS di GoogleSQL o PostgreSQLALTER STATISTICS.

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

Un pacchetto di statistiche contiene istogrammi dei dati delle colonne, in base alle pratiche standard del settore. In questo modo, lo strumento di ottimizzazione delle query seleziona i piani 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 eliminati dal database potrebbe essere conservato per altri 30 giorni nelle tabelle di distribuzione delle statistiche. I pacchetti di statistiche bloccati con l'opzione del database optimizer_statistics_package o i pacchetti con l'opzione ALLOW_GC=FALSE non verranno sottoposti a 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 dell'ottimizzatore vengono archiviate criptate nello stesso modo dei dati utente.

La quantità totale di spazio di archiviazione richiesta per questi pacchetti è in genere inferiore a 100 MB e viene conteggiata ai fini dei costi totali di archiviazione.

Passaggi successivi