Analizza le prestazioni delle query

Questa pagina descrive come utilizzare la dashboard 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 nei 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 la query o il tag di richiesta per identificare i problemi.

Query Insights è disponibile nelle configurazioni a regione singola e multiregionale.

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 un periodo di conservazione massimo di 30 giorni. Per saperne 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.

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 sull'istanza:

Per visualizzare la pagina Query Insights, 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, verifica di:

  • Avere il ruolo Visualizzatore Cloud Spanner(roles/spanner.viewer)
  • Disporre dei privilegi di controllo dell'accesso granulare e che ti sia stato concesso il ruolo di sistema spanner_sys_reader o uno dei suoi ruoli membri.
  • Selezionare spanner_sys_reader o un ruolo membro come ruolo di sistema corrente nella pagina di riepilogo del database.

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

La 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 ti aiutano a visualizzare il carico delle query.

Per visualizzare la dashboard Query Insights per un database:

  1. Seleziona Query Insights 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 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 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 Query e tag TopN: mostra l'elenco delle query e dei tag di richiesta principali ordinati in base all'utilizzo della CPU. Consulta Identificare una query o un tag potenzialmente problematico.

Dashboard Query Insights

Prestazioni della dashboard

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

Verificare se le query inefficienti sono responsabili dell'utilizzo elevato della CPU

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

Utilizzo totale della CPU per tutte le query

Esamina il grafico per rispondere a queste domande:

  • Quale database sta subendo 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 CPU - totale per i database nella Google Cloud console.

    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? Ha subito un picco di recente o è costantemente elevato da un po' di tempo? Utilizza il selettore dell'intervallo per selezionare vari periodi di tempo per scoprire da quanto tempo si verifica 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 sequenza temporale.

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. Poi, 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 l'impronta digitale 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 granularità diverse: 1 minuto, 10 minuti e 1 ora. Il valore di ogni punto dati nei grafici rappresenta il valore medio su un intervallo di un minuto.

Ti consigliamo di aggiungere tag alle query SQL. L'aggiunta di tag alle query ti aiuta a trovare i 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à:

  • Impronta digitale: 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 saperne di più sull'utilizzo dei tag di richiesta, consulta Risoluzione dei problemi relativi ai tag di richiesta e di transazione.

    Se la query non ha un tag associato, viene visualizzata la query SQL, troncata a circa 64 kB. Per DML batch, le istruzioni SQL vengono appiattite in una singola riga e concatenate, utilizzando un punto e virgola come delimitatore. 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 partitionToken ottenuto dall' API PartitionQuery. Tutte le altre query e istruzioni DML sono indicate dal tipo di query QUERY.

  • Utilizzo CPU: consumo di risorse CPU da parte di una query, come percentuale delle risorse CPU totali 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.

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

  • CPU (%): consumo di risorse CPU da parte di una query, come percentuale delle risorse CPU totali 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 media, in microsecondi, per ogni esecuzione della query all'interno del database. Questa media esclude il tempo di codifica e trasmissione per il set di risultati, nonché l'overhead.

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

  • Media righe restituite: 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 varianza tra i grafici

Potresti notare una certa varianza 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 motivi che potrebbero portare a questo scenario:

  • Origini 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 alimentano il grafico Utilizzo totale della CPU (per tag di query o richiesta), potrebbero essere mediati su 10 minuti (o 1 ora), nel qual 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 precedente a 6 ore, eseguiamo una query sulla tabella SPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE. In questo caso, un evento che si verifica alle 10:01 viene aggregato su 10 minuti e sarà presente nella tabella di sistema corrispondente al timestamp delle 10:10.

Lo screenshot seguente mostra un esempio di questa varianza.

Varianza tra i grafici

Analizzare una query o un tag di richiesta specifico

Per determinare se una query o un tag di richiesta è la causa principale del problema, fai clic sulla query o sul tag di richiesta che sembra avere il carico più elevato o che richiede più tempo rispetto agli altri. Puoi selezionare più query e tag di richiesta 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 restringere il problema esaminando quanto segue:

  • Da quanto tempo il carico è elevato? È elevato solo ora? O è elevato 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 nell'utilizzo della CPU? Puoi modificare la finestra temporale per studiare l'utilizzo storico della CPU per la query.
  • Qual è il consumo di risorse? Come si relaziona ad altre query? Esamina 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 in dettaglio i dettagli della forma della query specifica (o del tag di richiesta) e analizzarla ulteriormente nella pagina dei dettagli della query.

Visualizzare la pagina dei dettagli della query

Per visualizzare i dettagli di una forma di query o di un tag di richiesta specifico in forma grafica, fai clic sull'impronta digitale associata 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 il valore REQUEST_TAG corrispondente alla stringa di tag. In questo campo viene visualizzato solo il testo di una di queste query. Per DML batch, l'insieme di istruzioni SQL viene appiattito in una singola riga, concatenato utilizzando un punto e virgola come delimitatore. 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 CPU, in millisecondi, da parte di una query delle risorse CPU dell'istanza in un intervallo di tempo.
    • Latenza media (ms): durata media, in millisecondi, per ogni esecuzione della 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: 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 sul grafico rappresenta un piano di query campionato in un momento specifico e la relativa latenza della query. Fai clic su uno dei punti del 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 partitionToken ottenuti dall'API PartitionQuery e query DML partizionate.
  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 visualizza 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 suo elemento principale. Puoi fare clic su ogni iteratore per visualizzare informazioni espanse.
    • Visualizzazione sequenziale: la visualizzazione sequenziale visualizza il piano di query in una tabella gerarchica in cui ogni riga rappresenta un operatore. Puoi fare clic su ogni riga per visualizzare informazioni espanse.

      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: la quantità di 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: la quantità di tempo trascorso durante l' esecuzione dell'intero sottoalbero con radice in questo operatore. Non include il tempo di creazione del piano e altri overhead, quindi 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 dell'utilizzo della 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/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 scansionate dalla query in un periodo di tempo.

  9. Grafico delle righe restituite: mostra il numero di righe restituite da lla query in un periodo di tempo.

  10. Filtro dell'intervallo di tempo: filtra i dettagli della 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 granularità diverse: 1 minuto, 10 minuti e 1 ora. Il valore di ogni punto dati nei grafici rappresenta il valore medio su un intervallo di un minuto.

Cercare tutte le esecuzioni di una query nell'audit log

Per cercare tutte le esecuzioni di un'impronta digitale di query specifica 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