Panoramica dello strumento di ottimizzazione delle query

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

Panoramica

L'ottimizzatore 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 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. 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 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 strumento di ottimizzazione di Spanner prende inoltre le decisioni in base a una il costo delle alternative. Queste stime dei costi vengono calcolate utilizzando la struttura la query, lo schema del database e le stime del volume dei dati verrà generato da 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 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 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 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 a 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 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, 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.

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 eviterai che le query abbiano esito negativo dopo il pacchetto delle statistiche è stato garbage collection. Puoi modificare il valore di ALLOW_GC utilizzando l'istruzione DDL ALTER STATISTICS di GoogleSQL 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, in base alle pratiche standard 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. Pertanto, un piccolo campione di valori eliminati dal database potrebbe essere conservato per altri 30 giorni nelle tabelle di distribuzione delle statistiche. 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 in un periodo più lungo. Inoltre, il contenuto dei pacchetti di statistiche è incluso in 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 conteggiato ai fini dei costi totali di archiviazione.

Passaggi successivi