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 aiutarti a 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:
Eseguire una query nella console Google Cloud
- Vai alla pagina Istanze di Spanner in nella console Google Cloud.
-
Seleziona il nome dell'istanza contenente il database da query.
La console Google Cloud mostra 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.
La console Google 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 offre schede delle 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 La pagina di Spanner Studio è numerata 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 ispezione.
- 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 metti in evidenza un elemento nell'editor, il comando Esegui verrà modificato. per eseguire la selezione, in modo da poter eseguire proprio che hai selezionato.
- Il comando Cancella query elimina tutto il testo nell'editor e cancella le sottotabelle Risultati e Spiegazione.
- Il comando Formatta query formatta le istruzioni nei in modo che sia più facile leggerli.
- Il comando Scorciatoie mostra il set di tasti di scelta scorciatoie che puoi utilizzare nell'editor.
- Il link per la guida alle query SQL apre una scheda del browser per documentazione sulla sintassi delle query SQL.
Le query vengono convalidate automaticamente ogni volta che vengono aggiornate nel dell'editor. Se le istruzioni sono valide, la barra dei comandi dell'editor mostra un segno di spunta di conferma e il messaggio Valido. Se se ci sono 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 la query SQL e le istruzioni DML.
Sono codificati per colore e i numeri di riga vengono aggiunti automaticamente
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 inferiore di una scheda Query presenta tre sottotabelle:
- La scheda secondaria Schema mostra le tabelle nel database e i relativi schemi. Usala come riferimento rapido durante la composizione istruzioni nell'editor.
- La sottoscheda Risultati mostra i risultati quando esegui le istruzioni nell'editor. Per le query mostra una tabella dei risultati
per istruzioni DML come
INSERT
e >UPDATE
viene visualizzato un messaggio che indica il numero di righe interessate. - La scheda secondaria Spiegazione mostra grafici visivi della query i piani creati quando esegui le istruzioni nell'editor.
- Le sottotabelle Risultati e Spiegazione forniscono entrambe una selettore di istruzioni da utilizzare per scegliere i risultati o le al piano di query che vuoi visualizzare.
Visualizza piani di query campionate
- Vai alla pagina Istanze di Spanner in nella console Google Cloud.
-
Fai clic sul nome dell'istanza con le query che vuoi esaminare.
La console Google Cloud mostra la pagina Panoramica dell'istanza.
-
Nel menu Navigazione e sotto l'intestazione Osservabilità, fai clic su Approfondimenti sulle query.
La console Google Cloud mostra la pagina Approfondimenti sulle query 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 per configurare un 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 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 PartitionToken ottenuti dall'API PartitionQuery e Query DML partizionate.
-
Fai clic su uno dei punti del grafico per visualizzare un piano di query precedente e per visualizzare i passaggi compiuti durante l'esecuzione della query. Puoi anche fare clic su un operatore per visualizzare informazioni espanse 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 più CPU, Spanner conserva i piani di query campionate per 30 giorni su Pagina Query Insights di la 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 come segue: screenshot e descritto in maggiore dettaglio. Dopo aver eseguito una query in una 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, cioè tutte le le tabelle e gli indici si trovano in fondo al diagramma e all'output finale è in alto.
Ogni nodo, o scheda, nel grafico rappresenta un iteratore. contiene le seguenti informazioni:
- Il nome dell'iteratore. Un iteratore consuma righe dal proprio input e genera righe.
- Le statistiche di runtime che indicano quante righe sono state restituite, quale la latenza e la quantità di CPU consumata.
- 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 di CPU per questo iteratore rispetto al totale di la query.
- Lo spessore delle linee che collegano ciascun nodo rappresenta conteggio delle righe. Più spessa è la linea, maggiore è il numero di righe. al nodo successivo. Viene visualizzato il numero effettivo di righe in ogni scheda e quando posizioni il puntatore sopra un connettore.
- Viene visualizzato un triangolo di avviso su un nodo in cui una tabella intera scansione è stata eseguita. Ulteriori dettagli nel riquadro delle informazioni l'aggiunta di un indice o la revisione la query o lo schema in altri modi, se possibile, per evitare una scansione completa.
- Seleziona una scheda nel piano per visualizzarne i dettagli nel riquadro informativo sulla destra (5).
- Le informazioni sull'iteratore forniscono dettagli e il tempo di esecuzione statistiche per la scheda Iterator selezionata nel grafico.
- Riepilogo query fornisce dettagli sul numero di righe e il tempo necessario per eseguire la query. In evidenza operatori sono quelli che presentano una latenza significativa, utilizzano una CPU significativa rispetto ad altri operatori e restituisce una il numero di righe di dati.
- Cronologia di esecuzione delle query è un grafico temporale 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 è stato eseguito più volte durante l'esecuzione query, ma la sequenza temporale in questo caso rappresenta solo l'inizio alla prima e alla fine dell'ultima volta.
Ottimizzare una query con scarso rendimento
Immagina che la tua azienda gestisca un database di film online contenente informazioni su film come cast, società di produzione, dettagli sui film e altro ancora. La servizio viene eseguito su Spanner, ma ha riscontrato prestazioni problemi recenti.
In qualità di sviluppatore principale del servizio, ti verrà chiesto di esaminare questi problemi di prestazioni perché causano valutazioni scadenti per il servizio. Tu apri la console Google Cloud, vai all'istanza del database e apri l'editor query. Inserisci la seguente query l'editor ed eseguirlo.
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. Me ha formattato la query nell'editor selezionando FORMATTA QUERY. Nella parte in alto a destra dello schermo è presente anche 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ù in dettaglio la query per vedere se la query sia efficiente.
Analizza 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, pertanto, se questa durata è prevista.
Selezioni la scheda SPIEGAZIONE appena sotto l'editor di query per visualizzare una del piano di esecuzione creato da Spanner per eseguire query e restituiscono i risultati.
Il piano mostrato nello screenshot seguente è relativamente grande ma, anche in questo livello di zoom, puoi effettuare le seguenti osservazioni.
In base al Riepilogo delle query nel riquadro delle informazioni a destra, apprendiamo sono state scansionate quasi 3 milioni di righe e sono state restituite meno di 64.000 righe.
Dal riquadro Sequenza temporale di esecuzione della query possiamo anche vedere che 4 macchine sono stati coinvolti nella query. Un gruppo di macchine è responsabile dell'esecuzione di una parte della query. Gli operatori possono eseguire su uno o più machine learning. La selezione di un gruppo di macchine nella sequenza temporale viene evidenziata nell'immagine pianificare quale parte della query è stata eseguita sul gruppo.
Per questi motivi, decidi che potrebbe essere possibile un miglioramento delle prestazioni passando da un join applicato, scelto da Spanner per impostazione predefinita, a un join hash.
Migliora la query
Per migliorare le prestazioni della query, puoi utilizzare un hint di join per modificare il join a 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 suo piano visivo per cercare inefficienze. Di seguito è riportato un riepilogo delle query e dei piani precedenti e dopo l'applicazione di eventuali modifiche. Ogni scheda mostra la query eseguita e una di quella completa del piano di esecuzione delle 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 in questo scenario potrebbe essere migliorato era il fatto che un grosso
la proporzione di righe nella tabella title che qualificava il filtro LIKE
'% the %'
. È probabile che la ricerca di un'altra tabella con così tante righe
costoso. La modifica dell'implementazione dei join in un join hash è stata migliorata
le prestazioni in modo significativo.
Passaggi successivi
Per informazioni complete sul piano di query, consulta Esecuzione delle query piani.
Per informazioni di riferimento complete sugli operatori, consulta Esecuzione della query operatori.