Analizza le prestazioni delle query

In questa pagina viene descritto come utilizzare la dashboard di Query Insights per rilevare e analizzare problemi di prestazioni.

Panoramica di Query Insights

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

Query Insights consente di migliorare le prestazioni delle query di Spanner guidandoti attraverso i seguenti passaggi:

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

Query Insights è disponibile in configurazioni a livello di una o 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 query o tag di richiesta), i dati vengono presi dalle tabelle SPANNER_SYS.QUERY_STATS_TOP_*, che hanno una conservazione massima di 30 giorni. Per scoprire di più, consulta Conservazione dei dati.

Ruoli obbligatori

Hai bisogno di ruoli e autorizzazioni IAM diversi a seconda che tu sia un utente IAM o un utente con controllo dell'accesso dell'accesso granulare.

Utente IAM (Identity and Access Management)

Per ottenere le autorizzazioni necessarie per visualizzare la pagina Query Insights, chiedi all'amministratore di concederti i seguenti ruoli IAM nell'istanza:

Per visualizzare la pagina Insight sulle query sono necessarie le seguenti autorizzazioni nel ruolo Lettore database Cloud Spanner (roles/spanner.databaseReader):

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

Utente con controllo dell'accesso granulare

Se sei un utente con controllo dell'accesso granulare, assicurati di:

  • Disporre del visualizzatore Cloud Spanner(roles/spanner.viewer)
  • Disporre di privilegi di controllo dell'accesso granulari e disporre del ruolo di sistema spanner_sys_reader o di uno dei suoi ruoli dei membri.
  • Seleziona il ruolo spanner_sys_reader o un membro come ruolo di sistema attuale nella pagina della panoramica del database.

Per ulteriori informazioni, consulta Informazioni sul controllo dell'accesso granulare e Ruoli di sistema di controllo dell'accesso granulare dell'accesso.

Dashboard di Query Insights

La dashboard di Query Insights mostra il carico query in base al database e all'intervallo di tempo selezionati. Il carico di 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 ti consentono di visualizzare il carico delle query.

Per visualizzare la dashboard Query Insights per un database, segui questi passaggi:

  1. Seleziona Query Insights nel pannello di navigazione a sinistra. Si apre la dashboard di 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 di database: filtra il carico delle query su un database specifico o su tutti i database.
  2. Filtro intervallo di tempo: filtra il carico delle query in base a intervalli di tempo, ad esempio ore, giorni o un intervallo personalizzato.
  3. Grafico Utilizzo totale CPU (tutte le query): mostra il carico aggregato di tutte le query.
  4. Grafico sull'utilizzo totale della CPU (per query o tag di richiesta): mostra l'utilizzo della CPU da parte di ogni tag di query o richiesta.
  5. Tabella delle query e dei tag TopN: mostra l'elenco delle query e dei tag di richiesta principali ordinati per utilizzo della CPU. Consulta Identificare una query o un tag potenzialmente problematico.

Dashboard di Query Insights

Rendimento della dashboard

Utilizza i parametri di query o codifica le query per ottimizzare le prestazioni di Query Insights. Se non parametrizza o tagghi le query, potrebbero essere restituiti troppi risultati, il che potrebbe causare il caricamento non corretto della tabella delle query e dei tag TopN.

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

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

Utilizzo totale della CPU per tutte le query

Esamina il grafico per rispondere a queste domande:

  • Quale database è soggetto a questo 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 consultare il grafico Utilizzo CPU - Totale per i database nella console Google Cloud.

    Carico database

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

  • Quanto tempo è stato elevato l'utilizzo della CPU? Il picco è stato registrato di recente o è costantemente elevato da un po' di tempo? Usa il selettore dell'intervallo per selezionare vari periodi di tempo e scoprire quanto è durato il problema. Aumenta lo zoom per visualizzare una finestra temporale in cui si osservano 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 probabile che ciò sia dovuto a una o più query costose. Successivamente, puoi approfondire il percorso di debug identificando una query o un tag di richiesta potenzialmente problematico.

Identificare una query o un tag di richiesta potenzialmente problematico

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

Query TopN

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

La tabella Query TopN fornisce una panoramica delle query che utilizzano più CPU durante il periodo di tempo selezionato, ordinate dalla più alta alla più bassa. 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 ogni 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 i problemi a costrutti di livello superiore, ad esempio la logica di business o un microservizio.

Tabella delle query TopN

La tabella mostra le seguenti proprietà:

  • FPRINT: l'hash del tag della richiesta, se presente; altrimenti, l'hash della query.
  • Tag query o richiesta: se alla query è associato un tag, viene mostrato il tag di richiesta. Le statistiche relative a più query che hanno la stessa stringa tag sono raggruppate in una singola riga con il valore REQUEST_TAG corrispondente alla stringa di tag. Per ulteriori informazioni sull'uso dei tag di richiesta, consulta Risoluzione dei problemi relativi a tag di richiesta e tag di transazione.

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

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

  • Utilizzo 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 compreso tra 0 e 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): tempo medio, in microsecondi, per ogni esecuzione di query all'interno del database. Questa media esclude il tempo di codifica e trasmissione per il set di risultati, nonché l'overhead.

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

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

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

Possibile varianza tra i grafici

Potresti notare una differenza tra il grafico Utilizzo totale della CPU (tutte le query) e il grafico Utilizzo totale della CPU (per tag di query o richiesta). Ci sono due cose che potrebbero portare a questo scenario:

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

  • Finestre di aggregazione diverse: entrambi i grafici hanno finestre di aggregazione diverse. Ad esempio, durante l'ispezione di un evento risalente a più di 6 ore fa, viene eseguita una query sulla tabella SPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE. In questo caso, un evento che si verifica alle 10:01 viene aggregato nell'arco di 10 minuti e viene visualizzato nella tabella di sistema corrispondente al timestamp delle 10:10.

Il seguente screenshot mostra un esempio di questa varianza.

Varianza tra grafici

Analizzare una query o un tag di richiesta specifici

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

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

Prova a individuare il problema osservando quanto segue:

  • Quanto tempo è stato elevato? È solo alto ora? O è da molto tempo? Modifica gli intervalli di tempo per trovare la data e l'ora in cui la query ha iniziato a funzionare male.
  • Si sono verificati picchi di utilizzo della CPU? Puoi modificare la finestra temporale per studiare l'uso storico della CPU per la query.
  • Qual è il consumo delle risorse? Qual è la relazione con altre query? Osserva la tabella e confronta i dati di altre query con quella selezionata. C'è una differenza significativa?

Per confermare che la query selezionata contribuisca all'elevato utilizzo della CPU, puoi visualizzare in dettaglio la forma della query (o il tag di richiesta) specifica 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 forma grafica, fai clic sul tag 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 che hanno la stessa stringa tag sono raggruppate in una singola riga con REQUEST_TAG corrispondente a quella stringa tag. In questo campo viene mostrato solo il testo di una di queste query. Per DML in modalità batch, l'insieme di istruzioni SQL viene suddiviso in una singola riga, concatenata mediante un delimitatore di 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, da parte di 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 la codifica e il tempo di trasmissione per il set di risultati e l'overhead.
    • Media righe restituite: il numero medio di righe restituite dalla query.
    • Media righe scansionate: il numero medio di righe analizzate dalla query, esclusi i valori eliminati.
    • Media byte: numero di byte di dati restituiti dalla query, escluso l'overhead della codifica di trasmissione.
  3. Grafico di esempio dei piani di query: ogni punto del grafico rappresenta un piano di query campionato in un momento specifico e la latenza specifica della query. Fai clic su uno dei punti nel grafico per visualizzare il piano di query e i passaggi effettuati durante l'esecuzione della query. Nota: i piani di query non sono supportati per le query con partitionToken ottenuti dall'API PartitionQuery e dalle 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 dai propri input e produce righe per l'elemento padre. Puoi fare clic su ogni iteratore per visualizzare ulteriori informazioni.
  5. Grafico della latenza delle query: mostra il valore della latenza per una query selezionata in un periodo di tempo. Mostra anche la latenza media.
  6. Grafico Utilizzo CPU: mostra l'utilizzo della CPU da parte di una query, in percentuale, in un periodo di tempo. Mostra anche l'utilizzo medio della CPU.
  7. Grafico conteggio esecuzioni/non riuscite: 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 delle righe scansionate: mostra il numero di righe analizzate dalla query in un periodo di tempo.
  9. Grafico di 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, ad esempio ora, giorno o un intervallo personalizzato.

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