Panoramica dello strumento di ottimizzazione delle query

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

Panoramica

Lo strumento di ottimizzazione delle 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 i 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. L'ottimizzatore, durante il processo di produzione di un piano di esecuzione, conserva il significato logico della query SQL originale per restituire le righe corrette.

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

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

L'ottimizzatore di Spanner utilizza una combinazione di euristiche consolidate e ottimizzazione basata sui costi per produrre piani efficienti. Alcune euristiche sono molto semplici, ad esempio "applica filtri sulle macchine remote invece di estrarre i dati alla macchina locale". Altre euristiche sono più complesse, ma incarnano ancora il principio della logica di spostamento che riduce il volume dei dati più vicino ai 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 le 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 verrà prodotto dai frammenti della query. Ad esempio, Spanner stima quante righe della tabella Brani qualificano il filtro SongGenre = "Country" se questo filtro viene visualizzato in una query. Per facilitare il calcolo di queste stime, Spanner raccoglie periodicamente le 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 riga o colonna. Per ulteriori informazioni, consulta la sezione 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, lo strumento di ottimizzazione delle query di Spanner si evolverà, ampliando l'insieme di opzioni nel piano di esecuzione delle query e migliorando l'accuratezza delle stime che forniscono informazioni su queste scelte, portando a piani di esecuzione delle query più efficienti.

Spanner rilascia gli aggiornamenti degli ottimizzatori come nuove versioni degli strumenti di ottimizzazione delle query per migliorare l'efficienza dei suoi piani di esecuzione delle query. Per saperne di più sulle diverse versioni, consulta Versioni degli strumenti di ottimizzazione delle query di Spanner.

Pacchetti di statistiche dello strumento di ottimizzazione delle query

Spanner conserva le statistiche sulla distribuzione dei dati delle colonne delle tabelle per stimare quante righe verranno prodotte da una query. Lo strumento di ottimizzazione delle 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 piani di esecuzione delle query, quando le statistiche vengono aggiornate, è possibile per Spanner modificare il piano di query che utilizza per una query.

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

Costruire 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 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 verifica quanto segue:

  • 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 e avvia un'operazione a lunga esecuzione.

Dopo che Spanner termina di eseguire l'istruzione, lo strumento di ottimizzazione delle query impiega fino a dieci minuti per prendere in considerazione 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 garbage collection.

La tabella INFORMATION_SCHEMA.SPANNER_STATISTICS integrata 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. Ogni voce contiene anche un campo chiamato ALLOW_GC che definisce se un pacchetto può essere garbage collection.

Puoi aggiungere l'intero database a uno qualsiasi dei pacchetti elencati nella tabella. Il pacchetto delle statistiche fissato non verrà applicato alla garbage collection e il valore di ALLOW_GC viene ignorato purché il database sia bloccato in 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 abbiano esito negativo dopo la garbage collection del pacchetto di statistiche. Puoi modificare il valore di ALLOW_GC utilizzando l'istruzione DDL GoogleSQL ALTER STATISTICS o PostgreSQL ALTER STATISTICS.

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

Un pacchetto di statistiche contiene istogrammi dei dati delle colonne, come nelle pratiche standard del settore. Ciò consente allo strumento di ottimizzare le 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. Di conseguenza, un piccolo campione di valori eliminati dal database può essere conservato per altri 30 giorni negli istogrammi statistici. I pacchetti di statistiche fissati 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, il contenuto dei pacchetti di statistiche è incluso nei backup del database.

Le statistiche dell'ottimizzatore vengono archiviate in modo criptato come i 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 di archiviazione totali.

Passaggi successivi