Il visualizzatore del piano di query 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 acquisire familiarità 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 vuoi eseguire la query.
Nella console Google Cloud viene visualizzata la pagina Panoramica dell'istanza.
-
Seleziona il nome del database su cui vuoi eseguire una query.
Nella console Google Cloud viene visualizzata la pagina Panoramica del database.
-
Nel menu laterale, fai clic su Spanner Studio.
Nella console Google Cloud viene visualizzata 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 vedere la visualizzazione del piano di query.
Tour dell'Editor query
Nella pagina di Spanner Studio sono disponibili schede delle query che consentono di digitare o incollare istruzioni di query SQL e DML, di eseguirle nel database e di visualizzare i risultati e i piani di esecuzione delle query. I componenti chiave della pagina di 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 insight su query, transazioni, letture e altro sul database, come descritto nella sezione 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 delle query nella scheda Risultati e i piani di esecuzione delle query nella scheda Spiegazione. Modifica il comportamento predefinito utilizzando il menu a discesa per visualizzare Solo risultati o Solo spiegazione.
Evidenziando un elemento nell'editor, il comando Esegui viene modificato in Esegui selezionato, per eseguire esattamente ciò che hai selezionato.
- Il comando Cancella query elimina tutto il testo nell'editor e cancella le sottoschede Risultati e 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 alla guida alle query SQL apre una scheda del browser che rimanda alla 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 mostra un segno di spunta di conferma e il messaggio Valida. In caso di problemi, viene visualizzato un messaggio di errore con i dettagli.
- Il comando Esegui esegue le istruzioni inserite nel riquadro di modifica, generando i risultati delle query nella scheda Risultati e i piani di esecuzione delle query nella scheda Spiegazione. Modifica il comportamento predefinito utilizzando il menu a discesa per visualizzare Solo risultati o Solo spiegazione.
- L'editor consente di inserire le istruzioni per query SQL e DML.
Vengono codificati per colore e i numeri di riga vengono aggiunti automaticamente per le istruzioni su più righe.
Se inserisci più di un'istruzione nell'editor, devi utilizzare un punto e virgola di chiusura dopo ogni istruzione, fatta eccezione per l'ultima.
- Il riquadro inferiore di una scheda Query contiene tre sottotabelle:
- La scheda secondaria Schema mostra le tabelle nel database e i relativi schemi. Utilizzala come riferimento rapido quando scrivi istruzioni nell'editor.
- La scheda secondaria Risultati mostra i risultati quando esegui le istruzioni nell'editor. Per le query mostra una tabella dei risultati, mentre
per le istruzioni DML come
INSERT
e >UPDATE
mostra un messaggio sul numero di righe interessate. - La scheda secondaria Spiegazione mostra grafici visivi dei piani di query creati quando esegui le istruzioni nell'editor.
- Le sottotabelle Risultati e Spiegazione forniscono entrambe un selettore di istruzioni che puoi utilizzare per scegliere i risultati dell'istruzione o il piano di query da visualizzare.
Visualizza 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.
Nella console Google Cloud viene visualizzata la pagina Panoramica dell'istanza.
-
Nel menu Navigazione e sotto l'intestazione Osservabilità, fai clic su Approfondimenti sulle query.
Nella console Google Cloud viene visualizzata la pagina Query Insights dell'istanza.
-
Nel menu a discesa Database, seleziona il database con le query che vuoi esaminare.
La console Google Cloud mostra le informazioni sul carico delle query per il database. La tabella delle query e dei tag TopN mostra l'elenco delle query e dei tag di richiesta principali ordinati per utilizzo della CPU.
-
Trova la query con elevato utilizzo della CPU per cui vuoi visualizzare i piani di query campionati. Fai clic sul valore FSTAMP della query.
La pagina Dettagli query mostra un grafico di esempi di piani di query per la query nel tempo. Puoi diminuire lo zoom fino a un massimo di sette giorni prima dell'ora attuale. Nota: i piani di query non sono supportati per le query con partitionToken ottenuti dall'API PartitionQuery e query DML partizionate.
-
Fai clic su uno dei punti del grafico per vedere un piano di query precedente e visualizzare i passaggi compiuti durante l'esecuzione della query. Puoi anche fare clic su qualsiasi operatore per visualizzare le informazioni espanse sull'operatore.
In alcuni casi, potresti voler visualizzare i piani di query campionati e confrontare le prestazioni di una query nel tempo. Per le query che consumano più CPU, Spanner conserva piani di query campionati per 30 giorni nella pagina Query Insights 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 delle query, seleziona la scheda SPIEGAZIONE sotto l'editor delle query per aprire il visualizzatore del piano di esecuzione della 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, mentre l'output finale si trova in alto.
Ogni nodo, o card, nel grafico 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, qual è stata la latenza e quanta CPU è stata consumata.
- Forniamo i seguenti indizi visivi per aiutarti a identificare potenziali problemi all'interno del piano di esecuzione della query.
- Le barre rosse in un nodo sono indicatori visivi della percentuale di latenza o del tempo di CPU per l'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 tieni il puntatore sopra un connettore.
- Viene visualizzato un triangolo di avviso su un nodo in cui è stata eseguita una scansione completa della tabella. Ulteriori dettagli nel riquadro informativo includono suggerimenti come l'aggiunta di un indice o la revisione della query o dello schema in altri modi, se possibile, per evitare una scansione completa.
- Seleziona una scheda nel piano per visualizzare i dettagli nel riquadro informativo a destra (5).
- Informazioni sull'iteratore fornisce dettagli e statistiche di runtime per la scheda dell'iteratore selezionata nel grafico.
- Riepilogo query fornisce dettagli sul numero di righe restituite e sul tempo necessario per eseguire la query. Gli operatori in evidenza sono quelli che presentano latenza significativa, consumano molta CPU rispetto ad altri operatori e restituiscono un numero significativo di righe di dati.
- La cronologia di esecuzione della query è un grafico basato sul tempo che mostra per quanto tempo ogni gruppo di macchine ha eseguito 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 nel corso dell'esecuzione della query, ma la sequenza temporale rappresenta solo l'inizio della prima esecuzione e la fine dell'ultima volta.
Ottimizza una query con prestazioni scarse
Immagina che la tua società gestisca un database di film online contenente informazioni sui film, quali cast, società di produzione, dettagli dei film e altro ancora. Il servizio viene eseguito su Spanner, ma ultimamente si sono verificati alcuni problemi di prestazioni.
In qualità di sviluppatore principale del servizio, ti viene chiesto di esaminare questi problemi di prestazioni perché causano valutazioni scadenti per il servizio. Apri la console Google Cloud, vai all'istanza del database e apri l'editor query. Inserisci la seguente query nell'editor ed 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 formattato la query nell'editor selezionando FORMATTA QUERY. In alto a destra nella schermata è presente anche una nota che indica che la query è valida.
La scheda Risultati sotto l'Editor 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 la query lenta 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 la query sia il più efficiente possibile e, pertanto, se questa durata sia prevista.
Seleziona la scheda SPIEGAZIONE appena sotto l'editor 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 effettuare le seguenti osservazioni.
Sulla base del riepilogo delle query nel riquadro delle informazioni a destra, abbiamo scoperto che sono state scansionate quasi 3 milioni di righe e alla fine ne sono state restituite meno di 64.000.
Dal riquadro Sequenza temporale di esecuzione della query possiamo inoltre notare che nella query erano coinvolti quattro gruppi di macchine. Un gruppo di macchine è responsabile dell'esecuzione di una parte della query. Gli operatori possono essere eseguiti su una o più macchine. La selezione di un gruppo di macchine nella sequenza temporale evidenzia nel piano visivo quale parte della query è stata eseguita su quel gruppo.
A causa di questi fattori, decidi che potrebbe essere possibile un miglioramento delle prestazioni modificando il join da un join di applicazione, scelto per impostazione predefinita da Spanner, 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 di 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;
Il seguente screenshot illustra la query aggiornata. Come mostrato nello screenshot, la query è stata completata in meno di 5 secondi, con un miglioramento significativo rispetto al runtime di 120 secondi prima di questa modifica.
Esamina il nuovo piano visivo, mostrato nel seguente diagramma, per capire cosa ci dice su questo miglioramento.
Immediatamente, noti alcune differenze:
Nell'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 suo piano visivo per cercare infficienze. Di seguito è riportato un riepilogo delle query e dei piani prima e dopo eventuali modifiche. Ogni scheda mostra la query che è stata eseguita e una visualizzazione compatta della visualizzazione completa del piano di esecuzione della query.
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 poteva essere migliorato in questo scenario era che un'ampia
proporzione delle righe della tabella title qualifica il filtro LIKE
'% the %'
. Cercare in un'altra tabella con così tante righe
è probabilmente costoso. La modifica dell'implementazione di join in un join hash ha migliorato notevolmente le prestazioni.
Passaggi successivi
Per il riferimento completo sul piano di query, consulta Piani di esecuzione delle query.
Per un riferimento completo all'operatore, consulta Operatori di esecuzione delle query.