Analizza le prestazioni delle query

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

Panoramica di Query Insights

Query Insights ti aiuta a rilevare e diagnosticare i problemi di prestazioni delle query e delle istruzioni DML (INSERT, UPDATE e DELETE) per un database Spanner. Supporta il monitoraggio intuitivo e fornisce informazioni diagnostiche che non si limitano al rilevamento per identificare la causa principale dei problemi di prestazioni.

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

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

Query Insights è disponibile in configurazioni a regione singola e multiregionali.

Prezzi

Non sono previsti costi aggiuntivi per Query Insights.

Conservazione dei dati

Query Insights conserva i dati per un massimo di 30 giorni. Per il grafico Utilizzo totale della CPU (per tag di query o richiesta), Spanner recupera i dati dalle tabelle SPANNER_SYS.QUERY_STATS_TOP_*. Queste tabelle hanno una conservazione massima di 30 giorni. Per scoprire di più, consulta Conservazione dei dati.

Ruoli obbligatori

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

Utente Identity and Access Management (IAM)

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 Query Insights, sono necessarie le seguenti autorizzazioni nel ruolo Cloud Spanner Database Reader (roles/spanner.databaseReader):

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

Utente con controllo dell'accesso granulare dell'accesso

Se utilizzi controllo dell'accesso granulare dell'accesso, verifica di:

  • Disporre del ruolo Cloud Spanner Viewer(roles/spanner.viewer)
  • Disporre dei privilegi di controllo dell'accesso granulare dell'accesso e del ruolo di sistema spanner_sys_reader o di uno dei relativi ruoli membri.
  • Seleziona spanner_sys_reader o un ruolo di membro come ruolo di sistema attuale nella pagina Panoramica del database.

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

Dashboard di Query Insights

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

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

  1. Seleziona Query Insights nel pannello di navigazione a sinistra. Viene visualizzata 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 dei database: filtra il carico delle query su un database specifico o su tutti i database.
  2. Filtro dell'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 della CPU (tutte le query): mostra la frequenza media aggregata di utilizzo della CPU (in secondi di CPU al minuto) di tutte le query.
  4. Grafico Utilizzo totale della CPU (per tag di query o richiesta): mostra la frequenza media di utilizzo della CPU (in secondi di CPU al minuto) per ogni tag di query o richiesta.
  5. Tabella Query e tag TopN: visualizza l'elenco delle query e dei tag di richiesta principali ordinati in base all'utilizzo della CPU. Consulta Identifica una query o un tag potenzialmente problematico.

Dashboard di Query Insights

Prestazioni della dashboard

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

Verifica se l'utilizzo elevato della CPU è dovuto a query inefficienti

L'utilizzo totale della CPU è una misura della frequenza media di utilizzo della CPU (in secondi CPU al minuto) che le query eseguite nel database selezionato eseguono nel tempo.

Utilizzo totale della CPU per tutte le query

Esamina il grafico per esplorare queste domande:

  • Quale database sta riscontrando il 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 esaminare il grafico Utilizzo della CPU - Totale per i database nella consoleGoogle Cloud .

    Carico del database

  • L'utilizzo della CPU è elevato? Il grafico mostra picchi o valori elevati nel tempo? Se non vedi un utilizzo elevato della CPU, il problema non riguarda le query.

  • Da quanto tempo l'utilizzo della CPU è elevato? È aumentato di recente o è stato costantemente elevato per un po' di tempo? Utilizza il selettore dell'intervallo per selezionare vari periodi di tempo e scoprire da quanto tempo persiste il 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 cronologia.

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

Identifica un tag di query o richiesta 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 l'impronta 3216067328234137024 ha un utilizzo elevato della CPU e può essere problematica.

La tabella Query TopN fornisce una panoramica delle query che utilizzano la maggior parte della CPU durante la finestra temporale scelta, 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 minuto, 10 minuti e 1 ora. Il valore di ogni punto dati nei grafici rappresenta il valore medio in un intervallo di un minuto.

Ti consigliamo di aggiungere tag alle query SQL. Il tagging delle query ti aiuta a trovare i problemi nei costrutti di livello superiore, ad esempio con la logica di business o un microservizio.

Tabella delle query TopN

La tabella mostra le seguenti proprietà:

  • Impronta: hash del tag di richiesta o, se il tag non è presente, un hash del testo della query.
  • Tag di query o richiesta: se alla query è associato un tag, viene visualizzato il tag di richiesta. Le statistiche per più query con la stessa stringa di tag sono raggruppate in una singola riga con il valore REQUEST_TAG corrispondente alla stringa di tag. Per scoprire di più sull'utilizzo dei tag di richiesta, consulta 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 il DML batch, le istruzioni SQL vengono appiattite in una singola riga e concatenate utilizzando un delimitatore con punto e virgola. I testi SQL identici consecutivi vengono deduplicati prima del troncamento.

  • Tipo di query: indica se una query è 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 CPU: consumo di risorse della CPU da parte di una query, espresso come percentuale delle risorse della CPU totali 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.

  • Suggerimento: Spanner analizza le query per determinare se possono trarre vantaggio da indici migliorati. In questo caso, consiglia indici nuovi o modificati che possono migliorare le prestazioni delle query. Per saperne di più, consulta Utilizza l'Index Advisor di Spanner.

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

  • Conteggio esecuzioni: la frequenza media delle esecuzioni delle query, in esecuzioni al minuto, rilevata da Spanner durante l'intervallo.

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

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

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

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

Possibile variazione tra i grafici

Potresti notare una certa variazione tra il grafico Utilizzo totale della CPU (tutte le query) e il grafico Utilizzo totale della CPU (per tag di query o richiesta). Questo scenario può essere causato da due fattori:

  • Origini dati diverse: i dati di Cloud Monitoring, che alimentano il grafico Utilizzo totale della CPU (tutte le query), sono in genere più accurati perché vengono inviati 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 della CPU (per tag di query o richiesta), potrebbero essere calcolati come media su 10 minuti (o 1 ora). In questo caso, potremmo perdere i dati ad alta granularità che vediamo nel grafico Utilizzo totale della CPU (tutte le query).

  • Finestre di aggregazione diverse: entrambi i grafici hanno finestre di aggregazione diverse. Ad esempio, quando esaminiamo un evento risalente a più di 6 ore prima, eseguiamo 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 variazione.

Varianza tra i grafici

Analizza un tag di query o richiesta specifico

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

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

Prova a circoscrivere il problema esaminando quanto segue:

  • Da quanto tempo il carico è elevato? Is it only high now? O è alta da molto tempo? Modifica gli intervalli di tempo per trovare la data e l'ora in cui la query ha iniziato a mostrare un rendimento scarso.
  • Si sono verificati picchi di utilizzo della CPU? Puoi modificare la finestra temporale per studiare l'utilizzo della CPU nel tempo per la query.
  • Qual è il consumo di risorse? In che modo è correlata ad altre query? Guarda la tabella e confronta i dati di altre query con quella selezionata. C'è una differenza significativa?

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

Visualizza la pagina dei dettagli della query

Per visualizzare i dettagli di una forma di query o di un tag di richiesta specifico in formato grafico, fai clic sul fingerprint associato alla query o al tag di richiesta. Viene visualizzata la pagina dei dettagli della query.

Pagina dei dettagli della query

La pagina dei dettagli della query mostra le seguenti informazioni:

  1. Testo dei dettagli della query: testo della query SQL, troncato a circa 64 kB. Le statistiche per più query con la stessa stringa di tag sono raggruppate in una singola riga con REQUEST_TAG corrispondente alla stringa di tag. In questo campo viene mostrato solo il testo di una di queste query. Per il DML batch, l'insieme di istruzioni SQL viene appiattito in una singola riga, concatenata utilizzando un delimitatore con punto e virgola. I testi SQL identici consecutivi vengono deduplicati prima del troncamento.
  2. I valori dei seguenti campi:
    • Conteggio esecuzioni: la frequenza media delle esecuzioni delle query, in esecuzioni al minuto, rilevata da Spanner durante l'intervallo.
    • CPU media (ms): consumo medio di risorse della CPU, in millisecondi, da parte di una query delle risorse della CPU dell'istanza in un intervallo di tempo.
    • Latenza media (ms): durata media, in millisecondi, di 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.
    • Numero medio di righe restituite: il numero medio di righe restituite dalla query.
    • Media righe scansionate: numero medio di righe scansionate dalla query, esclusi i valori eliminati.
    • Byte medi: numero di byte di dati restituiti dalla query, escluso l'overhead di codifica della trasmissione.
  3. Grafico degli esempi di piani di query: ogni punto del grafico rappresenta un piano di query campionato in un momento specifico e la relativa latenza di query specifica. Fai clic su uno dei punti nel grafico per visualizzare il piano di query e i passaggi eseguiti durante l'esecuzione della query. Nota: i piani di query non sono supportati per le query con partitionTokens ottenuti dall'API PartitionQuery e per le query DML partizionato.
  4. Visualizzatore del piano di query: mostra il piano di query campionato selezionato. Spanner offre le seguenti opzioni di layout:

    • Visualizzazione ad albero: la visualizzazione ad albero mostra il piano di query come un grafico in cui ogni nodo o scheda rappresenta un iteratore che consuma righe dai suoi input e produce righe per il relativo nodo principale. Puoi fare clic su ogni iteratore per visualizzare informazioni dettagliate.
    • Visualizzazione sequenziale: la visualizzazione sequenziale mostra il piano di query in una tabella gerarchica in cui ogni riga rappresenta un operatore. Puoi fare clic su ogni riga per visualizzare informazioni dettagliate.

      Visualizzazione sequenziale di un piano di query

      La tabella mostra le seguenti colonne:

      • Nome: il nome dell'operatore.
      • Gruppo di macchine: il gruppo di macchine in cui è stato eseguito questo operatore.
      • Latenza: il tempo trascorso durante l'esecuzione dell'operazione corrente. Potrebbe essere superiore al tempo di CPU (ad esempio, se l'operatore è rimasto in attesa di chiamate remote o per un ritardo del file system).
      • Latenza cumulativa: il tempo trascorso durante l'esecuzione dell'intero sottoalbero con radice in questo operatore. Questo non include il tempo di creazione del piano e altri overhead, pertanto la latenza cumulativa potrebbe essere inferiore alla durata totale della query.
      • Tempo di CPU: quantità totale di tempo di CPU dedicato all'esecuzione della query. Latenza di rete esclusa. Alcune parti dell'esecuzione della query potrebbero procedere in parallelo, pertanto il tempo di CPU potrebbe essere maggiore rispetto al tempo totale trascorso. Ad esempio, se una query esegue dieci operazioni in parallelo in 1 millisecondo (ms), il tempo trascorso è di 1 ms, ma il tempo di CPU è di 10 ms.
      • Righe restituite: il numero di righe restituite dall'operatore.
  5. Grafico della latenza delle query: mostra il valore della latenza delle query 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 del conteggio delle esecuzioni/delle esecuzioni non riuscite: mostra la frequenza media delle esecuzioni delle query (in esecuzioni al minuto) in un periodo di tempo e la frequenza media delle esecuzioni delle query non riuscite (in esecuzioni non riuscite al minuto).

  8. Grafico Righe analizzate: mostra il numero di righe analizzate dalla query in un periodo di tempo.

  9. Grafico 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 ha tre diverse granularità: 1 minuto, 10 minuti e 1 ora. Il valore di ogni punto dati nei grafici rappresenta il valore medio in un intervallo di un minuto.

Cerca tutte le esecuzioni di una query nell'audit log

Per cercare tutte le esecuzioni di una determinata fingerprint della query in Cloud Audit Logs, esegui una query sull'audit log e cerca qualsiasi query_fingerprint corrispondente al campo Fingerprint nella tabella delle statistiche delle query TopN. Per saperne di più, consulta la panoramica delle query e della visualizzazione dei log. Utilizza questo metodo per identificare l'utente che ha avviato la query.

Passaggi successivi