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 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 La trasformazione di un'istruzione dichiarativa in un piano di esecuzione di query comporta trasformazioni in 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 euristiche consolidate e ottimizzazione basata sui costi per produrre piani efficienti. Alcune euristiche sono molto come "eseguire filtri su macchine remote invece di estrarre alla macchina locale". Altre euristiche sono più complesse, ma incarnano comunque il principio della logica di spostamento che riduce il volume dei dati più vicino ai dati. Questo particolarmente importante in un sistema che esegue lo sharding dei dati machine learning.
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 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, consulta la sezione Ottimizzare le scansioni.
Per saperne di più sui piani di esecuzione delle query e su come vengono utilizzati Spanner per eseguire query in un ambiente distribuito, vedi 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 un insieme di scelte nel piano di esecuzione delle query e il miglioramento dell'accuratezza le stime su cui si basano queste scelte, generando query più efficienti piani di esecuzione.
Spanner rilascia gli aggiornamenti dello strumento di ottimizzazione come nuovo ottimizzatore delle query 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 le statistiche sulla distribuzione dei dati della tabella per stimare il numero di righe che verranno prodotte da una query. La query ottimizzatore 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, è 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 a una versione precedente del pacchetto di statistiche. Inoltre possibilità di eseguire singole query con un pacchetto di statistiche rispetto al 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 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 dal giorno e alla loro creazione, dopodiché saranno soggetti alla 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, dove 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 qualsiasi dei pacchetti elencati al suo interno
tabella. Il pacchetto delle statistiche fissato non sarà garbage collection e il valore di
ALLOW_GC
viene ignorato finché il database è bloccato a questo pacchetto. Per utilizzare
un particolare pacchetto di statistiche per una singola query, il pacchetto deve
elencata con ALLOW_GC=FALSE
o fissata. In questo modo eviterai che le query abbiano esito negativo dopo
il pacchetto delle statistiche è stato garbage collection. 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 del set di dati può potenzialmente contenere PII.
Spanner crea regolarmente un nuovo pacchetto di statistiche.
la conserva per impostazione predefinita per 30 giorni. 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
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
- Per ulteriori informazioni sulla cronologia dello strumento di ottimizzazione delle query, consulta Strumento di ottimizzazione delle query della cronologia delle versioni.
- Per gestire sia la versione dell'ottimizzatore che il pacchetto di statistiche per il tuo consulta Gestire lo strumento di ottimizzazione delle query.