Il visualizzatore del piano query ti consente di comprendere rapidamente la struttura del piano query scelto da Spanner per valutare una query. Questa guida descrive come utilizzare un piano query per comprendere l'esecuzione delle query.
Prima di iniziare
Per acquisire familiarità con le parti dell' Google Cloud interfaccia utente della console menzionate in questa guida, leggi quanto segue:
Esegui una query nella Google Cloud console
- Vai alla pagina Istanze di Spanner in Google Cloud console.
-
Seleziona il nome dell'istanza contenente il database su cui vuoi eseguire la query.
Google Cloud La console visualizza la pagina Panoramica dell'istanza.
-
Seleziona il nome del database su cui vuoi eseguire la query.
Google Cloud La console visualizza la pagina Panoramica del database.
-
Nel menu laterale, fai clic su Spanner Studio.
Google Cloud La console visualizza 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 il piano query.
Visita guidata dell'editor di query
La pagina Spanner Studio fornisce schede di query che ti consentono di digitare o incollare query SQL e istruzioni DML, eseguirle sul database e visualizzare 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 di query aperte. Per creare una nuova
scheda, fai clic su Nuova scheda.
Puoi anche utilizzare Gemini Code Assist per ricevere assistenza basata sull'AI assistenza. Per ulteriori informazioni, consulta Scrivere SQL con l'assistenza di Gemini.
- La barra dei comandi dell'editor fornisce le seguenti opzioni:
- Il comando Esegui esegue le istruzioni inserite nel
riquadro di modifica, producendo 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 produrre Solo risultati
o Solo spiegazione.
Se evidenzi qualcosa nell'editor, il comando Esegui diventa Esegui selezione, consentendoti di eseguire ciò che hai selezionato.
- Il comando Salva ti consente di creare, salvare e gestire gli script SQL come query salvate. Per ulteriori informazioni, consulta la panoramica delle query salvate.
- Il comando Formato formatta le istruzioni nell'editor in modo che siano più facili da leggere.
- Il comando Cancella elimina tutto il testo nell'editor e cancella le sottoschede Risultati e Spiegazione.
- Il link Documentazione apre una scheda del browser alla documentazione di Spanner 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. In caso di problemi, viene visualizzato un messaggio di errore con i dettagli.
- Il comando Esegui esegue le istruzioni inserite nel
riquadro di modifica, producendo 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 produrre Solo risultati
o Solo spiegazione.
- L'editor è il punto in cui inserisci le query SQL e le istruzioni DML.
Gli input sono codificati a colori e i numeri di riga vengono aggiunti automaticamente per
istruzioni su più righe.
Se inserisci più di un'istruzione nell'editor, devi utilizzare un punto e virgola di terminazione dopo ogni istruzione, tranne l'ultima.
- Il riquadro inferiore di una scheda di query fornisce le seguenti sottoschede:
- La sottoscheda Risultati mostra i risultati quando esegui le
istruzioni nell'editor. Per le query mostra una tabella dei risultati e
per le istruzioni DML come
INSERTeUPDATEmostra un messaggio sul numero di righe interessate.Se vuoi, fai clic su Esporta per esportare i risultati della query. Sono disponibili le seguenti opzioni:
- Scarica CSV
- Scarica JSON
- Esporta in Fogli Google
- Copia negli appunti (CSV)
- Copia negli appunti (TSV)
- Copia negli appunti (JSON)
- La sottoscheda Spiegazione mostra i grafici visivi dei piani di query creati quando esegui le istruzioni nell'editor.
- La sottoscheda Risultati mostra i risultati quando esegui le
istruzioni nell'editor. Per le query mostra una tabella dei risultati e
per le istruzioni DML come
Visualizza i piani di query campionati
- Vai alla pagina Istanze di Spanner in Google Cloud console.
-
Fai clic sul nome dell'istanza con le query che vuoi esaminare.
Google Cloud La console visualizza la pagina Panoramica dell'istanza.
-
Nel menu Navigazione e sotto l'intestazione Osservabilità, fai clic su Query Insights.
Google Cloud La console visualizza la pagina Query Insights dell'istanza.
-
Nel menu a discesa Database, seleziona il database con le query che vuoi esaminare.
Google Cloud La console visualizza le informazioni sul carico delle query per il database. La tabella Query e tag TopN mostra l'elenco delle query e dei tag di richiesta principali ordinati in base all'utilizzo della CPU.
-
Trova 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 diminuire 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 partitionTokens ottenuti dall'API PartitionQuery e query DML partizionate.
-
Fai clic su uno dei punti del 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 informazioni dettagliate sull'operatore.
Figura 8. Grafico degli esempi di piani di query.
In alcuni casi, potresti voler visualizzare piani di query campionati e confrontare il rendimento di una query nel tempo. Per le query che consumano più CPU, Spanner conserva i piani di query campionati per 30 giorni nella pagina Query Insights della Google Cloud console. Per visualizzare i piani di query campionati:
Visita guidata del visualizzatore del piano query
I componenti chiave del visualizzatore sono annotati nello screenshot seguente e descritti in modo più dettagliato. Dopo aver eseguito una query in una scheda di query, seleziona la scheda SPIEGAZIONE sotto l'editor di query per aprire il visualizzatore del piano di esecuzione della query.
Il flusso di dati nel diagramma seguente è dal basso verso l'alto, ovvero tutte le tabelle e gli indici si trovano nella parte inferiore del diagramma e l'output finale nella parte superiore.
- La visualizzazione del piano può essere di grandi dimensioni, a seconda della query eseguita. Per nascondere e mostrare i dettagli, attiva/disattiva il selettore della visualizzazione ESPANDI/COMPATTA. Puoi personalizzare la quantità di il piano visualizzata in un determinato momento utilizzando il controllo dello zoom.
- L'algebra che spiega come Spanner esegue la query
viene disegnata come un grafico aciclico, in cui ogni nodo corrisponde a un
iteratore che utilizza le righe dai suoi input e produce righe per il suo
elemento principale. Un piano di esempio è mostrato nella Figura 9. Fai clic sul diagramma
per visualizzare una visualizzazione espansa di alcuni dettagli del piano.
Figura 9. Piano visivo di esempio (fai clic per ingrandire).
Ogni nodo, o scheda, del grafico rappresenta un iteratore e contiene le seguenti informazioni:
- Il nome dell'iteratore. Un iteratore utilizza le righe dal suo input e produce righe.
- Statistiche di runtime che indicano il numero di righe restituite, la latenza e la quantità di CPU utilizzata.
- Forniamo i seguenti indicatori 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 tempo CPU per questo iteratore rispetto al totale per la query.
- Lo spessore delle linee che collegano ogni nodo rappresenta il conteggio delle 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 su un connettore.
- Su un nodo in cui è stata eseguita una scansione completa della tabella viene visualizzato un triangolo di avviso. 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).
- La mini mappa del piano di esecuzione mostra una visualizzazione ridotta del piano completo ed è utile per determinare la forma complessiva del piano di esecuzione e per navigare rapidamente in diverse parti del piano. Trascina direttamente sulla mini mappa o fai clic sul punto su cui vuoi concentrarti per passare a un'altra parte del piano visivo.
Seleziona SCARICA JSON per scaricare una versione JSON del piano di esecuzione, utile per la risoluzione dei problemi. Puoi anche condividerlo quando contatti il team di Spanner per assistenza. Il salvataggio del file JSON non salva il risultato della query.
Per scaricare e salvare una versione JSON del piano di esecuzione da visualizzare in un secondo momento:
- In Spanner Studio, esegui una query.
- Seleziona la scheda Spiegazione.
- Fai clic su SCARICA JSON per scaricare la versione JSON del piano di esecuzione.
- Salva e copia i contenuti del file JSON.
- Apri una nuova scheda dell'editor di query.
- Nella scheda dell'editor, inserisci:
PROTO: CONTENT_OF_JSON
- Fai clic su Esegui.
- Seleziona la scheda Spiegazione sotto l'editor di query per visualizzare una rappresentazione visiva del piano di esecuzione scaricato.
- Il riquadro informativo mostra informazioni contestuali dettagliate su
il nodo selezionato nel diagramma del piano query. Le informazioni sono
organizzate nelle seguenti categorie.
- Informazioni sull'iteratore fornisce dettagli, nonché statistiche di runtime, per la scheda dell'iteratore selezionata nel grafico.
- Riepilogo query fornisce dettagli sul numero di righe restituite e sul tempo impiegato per eseguire la query. Gli operatori principali sono quelli che mostrano una latenza significativa, consumano una quantità di CPU significativa rispetto ad altri operatori e restituiscono un numero significativo di righe di dati.
- Cronologia di esecuzione delle query è un grafico basato sul tempo che mostra per quanto tempo ogni gruppo di macchine ha eseguito la sua parte della query. Un gruppo di macchine potrebbe non essere in esecuzione per l' intera durata dell'esecuzione della query. È anche possibile che un gruppo di macchine sia stato eseguito più volte durante l'esecuzione della query, ma la cronologia qui rappresenta solo l'inizio della prima esecuzione e la fine dell'ultima esecuzione.
Ottimizza una query con prestazioni scadenti
Supponiamo che la tua azienda gestisca un database di film online che contiene informazioni sui film, come cast, società 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 Google Cloud console, vai all'istanza del database e poi apri l'editor di 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. Nell'angolo in alto a destra dello schermo è presente anche una nota che 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.
Analizza la query lenta con il visualizzatore del piano query
A questo punto, sappiamo che la query nel passaggio precedente richiede più di due minuti, ma non sappiamo se la query è il più efficiente possibile e, di conseguenza, 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 query nel riquadro informativo a destra, apprendiamo che sono state scansionate quasi 3 milioni di righe e che alla fine ne sono state restituite meno di 64.000.
Dal riquadro Cronologia di esecuzione delle query possiamo anche vedere che nella query erano 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. Selezionando un gruppo di macchine nella cronologia, nel piano visivo viene evidenziata la parte della query eseguita su quel gruppo.
A causa di questi fattori, decidi che un miglioramento delle prestazioni potrebbe essere possibile modificando il join da un join di applicazione, scelto da Spanner per impostazione predefinita, a un hash join.
Migliora la query
Per migliorare il rendimento della query, utilizzi un hint di join per modificare il metodo di join in un hash join. 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;
Lo screenshot seguente illustra la query aggiornata. Come mostrato nello screenshot, la query è stata completata in meno di 5 secondi, un miglioramento significativo rispetto ai 120 secondi di runtime precedenti a questa modifica.
Esamina il nuovo piano visivo, mostrato nel diagramma seguente, per vedere cosa ci dice di questo miglioramento.
Noti immediatamente alcune differenze:
In questa esecuzione della query era 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 inefficienze. Di seguito è riportato un riepilogo delle query e dei piani prima e dopo l'apporto di 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 grande
percentuale di righe della tabella title soddisfaceva il filtro LIKE
'% the %'. La ricerca in un'altra tabella con così tante righe è probabilmente costosa. La modifica dell'implementazione del join in un hash join ha migliorato significativamente il rendimento.
Passaggi successivi
Per il riferimento completo al piano query, consulta Piani di esecuzione delle query.
Per il riferimento completo all'operatore, consulta Operatori di esecuzione delle query.