Panoramica dello strumento di ottimizzazione delle query

Questa pagina descrive l'ottimizzatore delle query di Spanner e i relativi vantaggi.

Panoramica

Lo strumento di ottimizzazione delle query SQL di Spanner converte un'istruzione SQL dichiarativa, che descrivano quali dati sono 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 della query prevede l'esecuzione di trasformazioni alle strutture ad albero utilizzate per rappresentare la query. La ottimizzatore, nel processo di produzione di un piano di esecuzione, conserva la logica significato della query SQL originale in modo che vengano restituite le righe corrette.

Un altro ruolo importante dell'ottimizzatore consiste nel produrre un piano di esecuzione in modo efficace.

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

L'ottimizzatore di Spanner utilizza una combinazione di strategie basate su heurismi ben definiti e ottimizzazione in base al costo per produrre piani efficienti. Alcune heurismi 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 di spostare la logica che riduce il volume dei 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 lo Optimizer 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 Brani qualificano il filtro SongGenre = "Country" se il filtro viene visualizzato in una query. Per aiutare al 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 determinare se è necessario utilizzare un metodo di elaborazione orientato a riga o colonna la query. Per ulteriori informazioni, vedi 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 scoprire 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 le statistiche sulla distribuzione dei dati della tabella per stimare il numero di righe che 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 piani di esecuzione delle query, è possibile che Spanner modifichi 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 su una versione precedente del pacchetto di statistiche. Puoi anche eseguire singole query con un pacchetto di statistiche diverso dall'ultimo.

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 il metodo Istruzione DDL GoogleSQL ANALYZE o PostgreSQL Istruzione DDL ANALYZE.

Dopo modifiche significative ai dati o allo schema del database, la creazione di un nuovo di dati può migliorare le prestazioni delle query. Come best practice, costruisci 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.

Esecuzione di un'istruzione DDL ANALYZE aggiorna lo schema, avvia una operazione a lunga esecuzione e annulla la creazione delle statistiche attivate automaticamente.

Al termine dell'esecuzione dell'istruzione, Spanner richiede fino a dieci minuti per consentire allo strumento di ottimizzazione delle query di tenere conto di un nuovo pacchetto di statistiche nel suo la 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 al garbage collection.

Lo strumento Spanner integrato INFORMATION_SCHEMA.SPANNER_STATISTICS 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 chiamato ALLOW_GC che definisce se un pacchetto può essere 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 ALLOW_GC con GoogleSQL ALTER STATISTICS o PostgreSQL ALTER STATISTICS Istruzione DDL.

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

Un pacchetto di statistiche contiene istogrammi dei dati delle colonne, come standard pratica del settore. Questo aiuta l'ottimizzatore delle query a selezionare la query ottimale piani. 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 il database può essere conservato per altri 30 giorni negli istogrammi statistici. Pacchetti di statistiche fissati con optimizer_statistics_package opzione di database o i pacchetti con l'opzione ALLOW_GC=FALSE non verranno inclusi nella 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 in 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 conteggiato ai fini dei costi totali di archiviazione.

Passaggi successivi