Il visualizzatore del piano di query ti consente di comprendere rapidamente la struttura del piano di query scelto da Spanner per valutare una query. Questa guida descrive come utilizzare un piano di query per comprendere l'esecuzione delle query.
Prima di iniziare
Per familiarizzare con le parti dell'interfaccia utente della console Google Cloud menzionate in questa guida, leggi quanto segue:
Esegui una query nella console Google Cloud
- Vai alla pagina Istanze di Spanner nella console Google Cloud .
-
Seleziona il nome dell'istanza contenente il database su cui eseguire la query.
La consoleGoogle Cloud mostra la pagina Panoramica dell'istanza.
-
Seleziona il nome del database su cui vuoi eseguire una query.
La consoleGoogle Cloud mostra la pagina Panoramica del database.
-
Nel menu laterale, fai clic su Spanner Studio.
La consoleGoogle Cloud mostra la pagina Spanner Studio del database.
- Inserisci la query SQL nel riquadro dell'editor.
-
Fai clic su Esegui.
Spanner esegue la query.
- Fai clic sulla scheda Spiegazione per visualizzare la visualizzazione del piano di query.
Un tour dell'editor di query
La pagina Spanner Studio fornisce schede di query che ti consentono di digitare o incollare istruzioni DML e query SQL, eseguirle sul tuo database e visualizzarne i risultati e i piani di esecuzione delle query. I componenti chiave della pagina Spanner Studio sono numerati nello screenshot seguente.
- La barra delle schede mostra le schede delle query aperte. Per creare una nuova scheda,
fai clic su Nuova scheda.
La barra delle schede fornisce anche un elenco di modelli di query che puoi utilizzare per incollare query che forniscono informazioni su query, transazioni, letture e altro ancora del database, come descritto in Panoramica degli strumenti di introspezione.
- La barra dei comandi dell'editor offre le seguenti opzioni:
- Il comando Esegui esegue le istruzioni inserite nel riquadro di modifica, generando i risultati della query nella scheda Risultati e i piani di esecuzione delle query nella scheda Spiegazione. Modifica il comportamento predefinito utilizzando il menu a discesa per generare Solo risultati o Solo spiegazione.
Se evidenzi un elemento nell'editor, il comando Esegui diventa Esegui selezione, consentendoti di eseguire solo ciò che hai selezionato.
- Il comando Cancella query elimina tutto il testo nell'editor e cancella le sottoschede Risultati ed Spiegazione.
- Il comando Formatta query formatta le istruzioni nell'editor in modo che siano più facili da leggere.
- Il comando Scorciatoie mostra l'insieme di scorciatoie da tastiera che puoi utilizzare nell'editor.
- Il link Guida alle query SQL apre una scheda del browser per la documentazione sulla sintassi delle query SQL.
Le query vengono convalidate automaticamente ogni volta che vengono aggiornate nell'editor. Se le istruzioni sono valide, la barra dei comandi dell'editor visualizza un segno di spunta di conferma e il messaggio Valido. Se si verificano problemi, viene visualizzato un messaggio di errore con i dettagli.
- Il comando Esegui esegue le istruzioni inserite nel riquadro di modifica, generando i risultati della query nella scheda Risultati e i piani di esecuzione delle query nella scheda Spiegazione. Modifica il comportamento predefinito utilizzando il menu a discesa per generare Solo risultati o Solo spiegazione.
- Nell'editor inserisci le query SQL e le istruzioni DML.
Sono codificati a colori e i numeri di riga vengono aggiunti automaticamente per
le istruzioni multiriga.
Se inserisci più di un'istruzione nell'editor, devi utilizzare un punto e virgola finale dopo ogni istruzione, tranne l'ultima.
- Il riquadro in basso di una scheda di query contiene tre sottoschede:
- La sottoscheda Schema mostra le tabelle nel database e i relativi schemi. Utilizzalo come riferimento rapido quando componi le istruzioni nell'editor.
- La sottoscheda Risultati mostra i risultati quando esegui le istruzioni nell'editor. Per le query viene visualizzata una tabella dei risultati, mentre per le istruzioni DML come
INSERT
e >UPDATE
viene visualizzato un messaggio relativo al numero di righe interessate. - La sottoscheda Spiegazione mostra i grafici visivi dei piani di query creati quando esegui le istruzioni nell'editor.
- Le sottoschede Risultati e Spiegazione forniscono entrambe un selettore di istruzioni che ti consente di scegliere i risultati o il piano di query dell'istruzione che vuoi visualizzare.
Visualizzare i piani di query campionati
- Vai alla pagina Istanze di Spanner nella console Google Cloud .
-
Fai clic sul nome dell'istanza con le query che vuoi esaminare.
La consoleGoogle Cloud mostra la pagina Panoramica dell'istanza.
-
Nel menu Navigazione, fai clic su Approfondimenti sulle query sotto l'intestazione Osservabilità.
La consoleGoogle Cloud mostra la pagina Approfondimenti sulle query dell'istanza.
-
Nel menu a discesa Database, seleziona il database con le query che vuoi esaminare.
La consoleGoogle Cloud mostra le informazioni sul carico delle query per il database. La tabella Query e tag TopN mostra l'elenco dei principali tag di query e richiesta ordinati in base all'utilizzo della CPU.
-
Individua la query con un elevato utilizzo della CPU per la quale vuoi visualizzare i piani di query campionati. Fai clic sul valore FPRINT della query.
La pagina Dettagli query mostra un grafico Esempi di piani di query per la query nel tempo. Puoi ridurre lo zoom fino a un massimo di sette giorni prima dell'ora corrente. Nota: i piani di query non sono supportati per le query con token partizione ottenuti dall'API PartitionQuery e dalle query DML partizionate.
-
Fai clic su uno dei punti nel grafico per visualizzare un piano di query precedente e visualizzare i passaggi eseguiti durante l'esecuzione della query. Puoi anche fare clic su un operatore per visualizzare le informazioni dettagliate sull'operatore.
In alcuni casi, potresti voler visualizzare piani di query campionati e confrontare il rendimento di una query nel tempo. Per le query che consumano una maggiore quantità di CPU, Spanner conserva i piani di query campionati per 30 giorni nella pagina Approfondimenti sulle query della console Google Cloud . Per visualizzare i piani di query campionati:
Fai un tour del visualizzatore del piano di query
I componenti chiave del visualizzatore sono annotati nello screenshot seguente e descritti in maggiore dettaglio. Dopo aver eseguito una query in una scheda query, seleziona la scheda SPIEGAZIONE sotto l'editor di query per aprire il visualizzatore del piano di esecuzione delle query.
Il flusso di dati nel seguente diagramma è dal basso verso l'alto, ovvero tutte le tabelle e gli indici si trovano nella parte inferiore del diagramma e l'output finale è in alto.
Ogni nodo o scheda del grafo rappresenta un iteratore e contiene le seguenti informazioni:
- Il nome dell'iteratore. Un iteratore consuma righe dall'input e produce righe.
- Statistiche di runtime che indicano quante righe sono state restituite, la latenza e la quantità di CPU utilizzata.
- Forniamo i seguenti indicatori visivi per aiutarti a identificare potenziali problemi nel piano di esecuzione della query.
- Le barre rosse in un nodo sono indicatori visivi della percentuale di latenza o tempo CPU per questo iteratore rispetto al totale della query.
- Lo spessore delle linee che collegano ciascun nodo rappresenta il numero di righe. Più spessa è la linea, maggiore è il numero di righe passate al nodo successivo. Il numero effettivo di righe viene visualizzato in ogni scheda e quando passi il cursore sopra un connettore.
- Un triangolo di avviso viene visualizzato su un nodo in cui è stata eseguita una scansione completa della tabella. Nel riquadro delle informazioni sono riportati ulteriori dettagli, tra cui consigli come l'aggiunta di un indice o la revisione della query o dello schema in altri modi, se possibile, per evitare una ricerca completa.
- Seleziona una scheda nel piano per visualizzarne i dettagli nel riquadro informativo sulla destra (5).
- Informazioni sull'iteratore fornisce dettagli e statistiche di runtime per la scheda dell'iteratore selezionata nel grafico.
- Il riepilogo della query fornisce dettagli sul numero di righe restituite e sul tempo necessario per eseguire la query. Gli operatori in evidenza sono quelli che presentano una latenza significativa, consumano una quantità significativa di CPU rispetto ad altri operatori e restituiscono un numero significativo di righe di dati.
- La cronologia di esecuzione delle query è un grafico basato sul tempo che mostra il tempo impiegato da ciascun gruppo di macchine per eseguire la propria parte della query. Un gruppo di macchine potrebbe non essere necessariamente in esecuzione per l'intera durata del tempo di esecuzione della query. È anche possibile che un gruppo di macchine sia stato eseguito più volte durante l'esecuzione della query, ma la sequenza temporale qui rappresenta solo l'inizio della prima esecuzione e la fine dell'ultima esecuzione.
Ottimizzare una query con scarso rendimento
Immagina che la tua azienda gestisca un database di film online contenente informazioni su film come cast, case di produzione, dettagli dei film e altro ancora. Il servizio viene eseguito su Spanner, ma di recente ha riscontrato alcuni problemi di prestazioni.
In qualità di sviluppatore principale del servizio, ti viene chiesto di esaminare questi problemi di prestazioni perché stanno causando valutazioni negative per il servizio. Apri la console Google Cloud , vai all'istanza del database e poi apri l'editor di query. Inserisci la seguente query nell'editor e eseguila.
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note HAVING MIN t.production_year) AS note
FROM
title AS t
JOIN
movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
Il risultato dell'esecuzione di questa query è mostrato nello screenshot seguente. Abbiamo formato la query nell'editor selezionando FORMATTA QUERY. Inoltre, nell'angolo in alto a destra dello schermo è presente una nota che ci indica che la query è valida.
La scheda RISULTATI sotto l'editor di query mostra che la query è stata completata in poco più di due minuti. Decidi di esaminare più da vicino la query per verificare se è efficiente.
Analizzare le query lente con il visualizzatore del piano di query
A questo punto, sappiamo che la query nel passaggio precedente richiede più di due minuti, ma non sappiamo se è il più efficiente possibile e, quindi, se questa durata è prevista.
Seleziona la scheda SPIEGAZIONE appena sotto l'editor di query per visualizzare una rappresentazione visiva del piano di esecuzione creato da Spanner per eseguire la query e restituire i risultati.
Il piano mostrato nello screenshot seguente è relativamente grande, ma anche a questo livello di zoom puoi fare le seguenti osservazioni.
In base al riepilogo della query nel riquadro delle informazioni a destra, scopriamo che sono state analizzate quasi 3 milioni di righe e che ne sono state restituite meno di 64.000.
Dal riquadro Cronologia di esecuzione delle query possiamo anche vedere che nella query sono stati coinvolti 4 gruppi di macchine. Un gruppo di macchine è responsabile dell'esecuzione di una parte della query. L'esecuzione degli operatori può avvenire su una o più macchine. La selezione di un gruppo di macchine nella sequenza temporale evidenzia nel piano visivo la parte della query eseguita su quel gruppo.
Per questi motivi, decidi che potrebbe essere possibile migliorare il rendimento cambiando il join da un join di applicazione, scelto da Spanner per impostazione predefinita, a un join hash.
Migliora la query
Per migliorare le prestazioni della query, utilizza un suggerimento di join per modificare il metodo di join in un join hash. Questa implementazione del join esegue l'elaborazione basata su set.
Ecco la query aggiornata:
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note HAVING MIN t.production_year) AS note
FROM
title AS t
JOIN
@{join_method=hash_join} movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
Lo screenshot seguente mostra la query aggiornata. Come mostrato nello screenshot, la query è stata completata in meno di 5 secondi, un miglioramento significativo rispetto ai 120 secondi di tempo di esecuzione prima di questa modifica.
Esamina il nuovo piano visivo, mostrato nel seguente diagramma, per scoprire cosa ci dice su questo miglioramento.
Noti subito alcune differenze:
In questa esecuzione della query è stato coinvolto un solo gruppo di macchine.
Il numero di aggregazioni è stato ridotto drasticamente.
Conclusione
In questo scenario, abbiamo eseguito una query lenta e abbiamo esaminato il relativo piano visivo per cercare inefficienze. Di seguito è riportato un riepilogo delle query e dei piani prima e dopo l'applicazione di eventuali modifiche. Ogni scheda mostra la query eseguita e una visualizzazione compatta del piano di esecuzione della query completo.
Prima
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note
HAVING
MIN t.production_year) AS note
FROM
title AS t
JOIN
movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
Dopo
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note
HAVING
MIN t.production_year) AS note
FROM
title AS t
JOIN
@{join_method=hash_join} movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
Un indicatore che qualcosa potrebbe essere migliorato in questo scenario è che una gran parte delle righe della tabella title ha soddisfatto il criterio del filtro LIKE
'% the %'
. La ricerca in un'altra tabella con così tante righe è probabile che sia costosa. La modifica dell'implementazione del join in un join hash ha migliorato notevolmente le prestazioni.
Passaggi successivi
Per il riferimento completo del piano di query, consulta Piani di esecuzione delle query.
Per il riferimento completo degli operatori, consulta Operatori di esecuzione delle query.