Rilevare i problemi di prestazioni delle query con Query Insights

Questa pagina descrive come utilizzare la dashboard Query Insights per rilevare e analizzare problemi di prestazioni.

Panoramica degli insight sulle query

Query Insights consente di rilevare e diagnosticare problemi di prestazioni di query e istruzione DML per un database Spanner. Supporta il monitoraggio intuitivo e fornisce informazioni diagnostiche che ti aiutano ad andare oltre il rilevamento per identificare la causa principale dei problemi di prestazioni.

Query Insights ti aiuta a migliorare le prestazioni delle query di Spanner guidandoti attraverso i seguenti passaggi:

  1. Verifica se le query inefficienti sono responsabili di un utilizzo elevato della CPU.
  2. Identifica una query o un tag potenzialmente problematico.
  3. Analizza la query o il tag di richiesta per identificare i problemi.

Query Insights è disponibile sia in configurazioni a singola regione che a più regioni.

Prezzi

Non sono previsti costi aggiuntivi per Query Insights.

Conservazione dei dati

La conservazione massima dei dati per Query Insights è di 30 giorni. Per il grafico Utilizzo totale della CPU (per tag di query o richiesta), i dati vengono acquisiti dalle tabelle SPANNER_SYS.QUERY_STATS_TOP_*, che hanno una conservazione massima di 30 giorni. Per ulteriori informazioni, consulta Conservazione dei dati.

Prima di iniziare

Per visualizzare la pagina Query Insights, oltre alle autorizzazioni di Cloud Monitoring e alle autorizzazioni di Spanner a livello di istanza e database, è necessario quanto segue:

  • Se sei un utente con controllo dell'accesso granulare, devi aver ricevuto l'accesso al ruolo di sistema spanner_sys_reader o a uno dei suoi ruoli membro. Seleziona un ruolo nella pagina Panoramica del database in modo che la sessione della console Google Cloud proceda con i privilegi richiesti.

  • Se non sei un utente con controllo dell'accesso granulare, devi disporre delle seguenti autorizzazioni IAM (Identity and Access Management):

    • spanner.databases.beginReadOnlyTransaction
    • spanner.databases.select
    • spanner.sessions.create

Per saperne di più, consulta Informazioni sul controllo dell'accesso granulare e Ruoli di sistema di controllo dell'accesso granulare degli accessi.

Dashboard Query Insights

La dashboard Query Insights mostra il carico delle query in base al database e all'intervallo di tempo selezionati. Il carico delle query è una misurazione dell'utilizzo totale della CPU per tutte le query nell'istanza nell'intervallo di tempo selezionato. La dashboard fornisce una serie di filtri che consentono di visualizzare il carico delle query.

Per visualizzare la dashboard Query Insights per un database:

  1. Seleziona Approfondimenti sulle query nel pannello di navigazione a sinistra. Si apre la dashboard Query Insights.
  2. Seleziona un database dall'elenco Database. La dashboard mostra le informazioni sul carico delle query per il database.

Le aree della dashboard includono:

  1. Elenco database: filtra il carico delle query su un database specifico o su tutti i database.
  2. Filtro intervallo di tempo: filtra il carico della query in base a intervalli di tempo, come ore, giorni o un intervallo personalizzato.
  3. Grafico Utilizzo totale della CPU (tutte le query): mostra il carico aggregato di tutte le query.
  4. Grafico Utilizzo totale della CPU (per tag di query o richiesta): mostra l'utilizzo della CPU per ogni tag di query o richiesta.
  5. Tabella delle query e dei tag principali: mostra l'elenco delle query principali e dei tag delle richieste ordinati per utilizzo della CPU. Consulta Identificare una query o un tag potenzialmente problematico.

Dashboard Query Insights

Verifica se le query inefficienti sono responsabili di un utilizzo elevato della CPU

L'utilizzo totale della CPU è una misura del lavoro (in secondi CPU) nel tempo eseguiti dalle query eseguite nel database selezionato.

Utilizzo totale della CPU per tutte le query

Esamina il grafico per esplorare queste domande:

  • Quale database è sottoposto al carico? Seleziona database diversi dall'elenco Database per trovare quelli con i carichi più elevati. Per scoprire quale database ha il carico più elevato, puoi anche rivedere il grafico Utilizzo CPU - totale per i database nella console Cloud.

    Carico database

  • L'utilizzo della CPU è elevato? Il grafico è in aumento o in aumento nel tempo? Se non noti un utilizzo elevato della CPU, significa che il problema non riguarda le query.

  • Per quanto tempo l'utilizzo della CPU è stato elevato? Ha avuto un picco di recente o è stato costantemente elevato da un po' di tempo? Usa il selettore dell'intervallo per selezionare vari periodi di tempo e scoprire la durata del problema. Aumenta lo zoom per visualizzare una finestra temporale in cui si osservano i picchi di carico delle query. Diminuisci lo zoom per visualizzare fino a una settimana della sequenza temporale.

Se vedi un picco o un'elevazione nel grafico corrispondente all'utilizzo complessivo della CPU dell'istanza, molto probabilmente è dovuto a una o più query costose. Successivamente, puoi approfondire il percorso di debug identificando una query o un tag di richiesta potenzialmente problematici.

Identificare un tag di richiesta o query potenzialmente problematico

Per identificare un tag di query o richiesta potenzialmente problematico, osserva la sezione Query TopN:

Query TopN

Qui vediamo che la query con Fprint 6815864236081503267 ha un utilizzo elevato di CPU e potrebbe essere problematica.

La tabella Query principali fornisce una panoramica delle query che utilizzano la maggior parte della CPU nell'intervallo di tempo scelto, ordinate dal più alto al più basso. Il numero di query TopN è limitato a 100.

Per i grafici, recuperiamo i dati dalla tabella delle statistiche delle query TopN, che ha tre diverse granularità: 1 min, 10 min e 1 ora. Il valore di ciascun punto dati nei grafici rappresenta il valore medio in un intervallo di un minuto.

Come best practice consigliata, puoi aggiungere tag alle query SQL. Il tagging delle query consente di individuare problemi a livello di costrutti di livello superiore, ad esempio con la logica di business o un microservizio.

Tabella delle query TopN

La tabella mostra le seguenti proprietà:

  • Fprint: l'hash del tag di richiesta, se presente; in caso contrario, l'hash della query.
  • Tag di richiesta o query: se alla query è associato un tag, viene mostrato il tag di richiesta. Le statistiche relative a più query che hanno la stessa stringa tag vengono raggruppate in una singola riga con il valore REQUEST_TAG corrispondente alla stringa tag. Per scoprire di più sull'utilizzo dei tag di richiesta, consulta la sezione Risoluzione dei problemi con i tag di richiesta e i tag di transazione.

    Se alla query non è associato un tag, viene visualizzata la query SQL, troncata a circa 64 kB. Per DML batch, le istruzioni SQL vengono suddivise in una singola riga e concatenate, utilizzando un delimitatore del punto e virgola. I testi SQL identici e consecutivi vengono deduplicati prima del troncamento.

  • Tipo di query: indica se una query è di tipo PARTITIONED_QUERY o QUERY. Un PARTITIONED_QUERY è una query con un partitionToken ottenuto dall'API PartitionQuery. Tutte le altre query e istruzioni DML sono indicate dal tipo di query QUERY.

  • Utilizzo della CPU: consumo di risorse della CPU da parte di una query, come percentuale delle risorse totali della CPU utilizzate da tutte le query in esecuzione sui database in quell'intervallo di tempo, mostrato su una barra orizzontale con un intervallo da 0 a 100.

  • CPU (%): consumo di risorse della CPU da parte di una query, come percentuale delle risorse totali della CPU utilizzate da tutte le query in esecuzione sui database in quell'intervallo di tempo.

  • Conteggio esecuzioni: numero di volte in cui Spanner ha visto la query durante l'intervallo.

  • Latenza media (ms): durata di tempo media, in microsecondi, per ogni esecuzione della query all'interno del database. Questa media esclude i tempi di codifica e trasmissione per il set di risultati, nonché l'overhead.

  • Media righe scansionate: numero medio di righe analizzate dalla query, esclusi i valori eliminati.

  • Media righe restituite: il numero medio di righe restituite dalla query.

  • Byte restituiti: il numero di byte di dati restituiti dalla query, escluso l'overhead di codifica di trasmissione.

Possibile varianza tra i grafici

Potresti notare alcune differenze tra il grafico Utilizzo totale della CPU (tutte le query) e il grafico Utilizzo totale della CPU (per tag di query o richiesta). Due fattori potrebbero portare a questo scenario:

  • Origini di dati diverse: i dati di Cloud Monitoring, che alimentano il grafico Utilizzo totale della CPU (tutte le query), sono in genere più precisi perché vengono inviati ogni minuto e hanno un periodo di conservazione di 45 giorni. D'altra parte, i dati della tabella di sistema, che alimenta il grafico Utilizzo totale della CPU (per tag di query o di richiesta), potrebbero essere calcolati in media su 10 minuti (o 1 ora), nel qual caso potremmo perdere i dati ad alta granularità riportati nel grafico Utilizzo totale della CPU (tutte le query).

  • Finestre di aggregazione diverse: entrambi i grafici hanno finestre di aggregazione diverse. Ad esempio, se ispezioni un evento più vecchio di 6 ore, eseguiremo una query sulla tabella SPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE. In questo caso, un evento che si verifica alle 10:01 verrebbe aggregato nell'arco di 10 minuti e sarebbe presente nella tabella di sistema corrispondente al timestamp 10:10.

Il seguente screenshot mostra un esempio di tale varianza.

Varianza tra i grafici

Analizzare una query o un tag di richiesta specifici

Per determinare se la causa principale del problema è un tag di query o richiesta, fai clic sul tag di query o richiesta che sembra avere il carico più elevato o richiedere più tempo degli altri. Puoi selezionare più query e richiedere tag contemporaneamente.

Per le query nella sequenza temporale, puoi tenere premuto il puntatore del mouse sul grafico per conoscere l'utilizzo della CPU (in secondi).

Prova a restringere il campo del problema osservando quanto segue:

  • Per quanto tempo è stato alto il carico? È solo alto ora? O è stata alta da molto tempo? Modifica gli intervalli di tempo per trovare la data e l'ora in cui la query ha iniziato a mostrare prestazioni scarse.
  • Ci sono stati picchi di utilizzo della CPU? Puoi modificare la finestra temporale per studiare l'utilizzo storico della CPU per la query.
  • Qual è il consumo delle risorse? In che modo si relaziona con altre query? Osserva la tabella e confronta i dati di altre query con quella selezionata. C'è una differenza importante?

Per verificare che la query selezionata contribuisca all'elevato utilizzo della CPU, puoi visualizzare in dettaglio la forma di query specifica (o tag di richiesta) e analizzarla ulteriormente nella pagina Dettagli query.

Visualizzare la pagina Dettagli query

Per visualizzare i dettagli di una forma di query o di un tag di richiesta specifici in formato grafico, fai clic sul valore Fprint associato alla query o al tag di richiesta. Viene visualizzata la pagina Dettagli query.

Pagina dei dettagli della query

La pagina Dettagli query mostra le seguenti informazioni:

  1. Testo dettagli query: testo della query SQL, troncato a circa 64 kB. Le statistiche relative a più query con la stessa stringa tag vengono raggruppate in una singola riga con il valore REQUEST_TAG corrispondente alla stringa tag. In questo campo viene mostrato solo il testo di una di queste query. Per DML batch, l'insieme di istruzioni SQL viene suddiviso in una singola riga, concatenato utilizzando un delimitatore del punto e virgola. I testi SQL identici consecutivi vengono deduplicati prima del troncamento.
  2. I valori dei seguenti campi:
    • Conteggio esecuzioni: numero di volte in cui Spanner ha visto la query durante l'intervallo.
    • CPU media (ms): consumo medio di risorse della CPU, in millisecondi, per una query sulle risorse della CPU dell'istanza in un intervallo di tempo.
    • Latenza media (ms): tempo medio, in millisecondi, per ogni esecuzione di query all'interno del database. Questa media esclude il tempo di codifica e trasmissione per il set di risultati e l'overhead.
    • Media righe restituite: il numero medio di righe restituite dalla query.
    • Media righe scansionate: numero medio di righe analizzate dalla query, esclusi i valori eliminati.
    • Byte medi: il numero di byte di dati restituiti dalla query, escluso l'overhead di codifica di trasmissione.
  3. Grafico di esempi dei piani di query: ogni punto del grafico rappresenta un piano di query campionato in un momento specifico e la sua latenza specifica delle query. Fai clic su uno dei punti del grafico per visualizzare il piano di query e i passaggi compiuti durante l'esecuzione della query. Nota: i piani di query non sono supportati per le query con partitionToken ottenuti dall'API PartitionQuery e query DML partizionate.
  4. Visualizzatore del piano di query: mostra il piano di query campionato selezionato. Ogni nodo, o scheda, nel grafico rappresenta un iteratore che consuma righe dagli input e produce righe per l'elemento padre. Puoi fare clic su ogni iteratore per visualizzare le informazioni espanse.
  5. Grafico della latenza delle query: mostra il valore della latenza della query per una query selezionata in un periodo di tempo. Mostra anche la latenza media.
  6. Grafico di utilizzo della CPU: mostra l'utilizzo della CPU da parte di una query, in percentuale, in un periodo di tempo. Mostra inoltre l'utilizzo medio della CPU.
  7. Conteggio delle esecuzioni/Grafico non riuscito: mostra il conteggio delle esecuzioni di una query in un periodo di tempo e il numero di volte in cui l'esecuzione della query non è riuscita.
  8. Grafico righe scansionate: mostra il numero di righe analizzate dalla query in un periodo di tempo.
  9. Grafico delle righe restituite: mostra il numero di righe restituite dalla query in un periodo di tempo.
  10. Filtro intervallo di tempo: filtra i dettagli delle query in base a intervalli di tempo, come ora, giorno o un intervallo personalizzato.

Per i grafici, recuperiamo i dati dalla tabella delle statistiche delle query TopN, che ha tre diverse granularità: 1 minuto, 10 minuti e 1 ora. Il valore di ciascun punto dati nei grafici rappresenta il valore medio in un intervallo di un minuto.