Utilizzare Query Insights per migliorare le prestazioni delle query

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

Introduzione

Query Insights consente di rilevare, diagnosticare e prevenire problemi di prestazioni delle query per i database Cloud SQL. Supporta un monitoraggio intuitivo e fornisce informazioni diagnostiche utili ad andare oltre il rilevamento per identificare la causa principale dei problemi di prestazioni.

Con Query Insights, puoi monitorare le prestazioni a livello di applicazione e tracciare l'origine di una query problematica nello stack di applicazioni per modello, visualizzazione, controller, route, utente e host. Lo strumento Query Insights può essere integrato con gli strumenti di monitoraggio delle applicazioni (APM) e i servizi Google Cloud esistenti utilizzando API e standard aperti. In questo modo puoi monitorare e risolvere i problemi con le query usando il tuo strumento preferito.

Query Insights consente di migliorare le prestazioni delle query Cloud SQL guidando i seguenti passaggi:

  1. Visualizza il carico del database per le query principali.
  2. Identifica una query o un tag potenzialmente problematico.
  3. Esamina la query o il tag per identificare i problemi.
  4. Individuare l'origine del problema.

Query Insights è supportato su tutti i tipi di macchine Cloud SQL e disponibile in tutte le regioni di Google Cloud.

Prezzi

Non sono previsti costi aggiuntivi per Query Insights. Puoi accedere a una settimana di dati nella dashboard Query Insights.

Query Insights non occupa spazio di archiviazione nello spazio di archiviazione dell'istanza Cloud SQL. Le metriche vengono archiviate in Cloud Monitoring. Per le richieste API, consulta la pagina dei prezzi di Cloud Monitoring. Cloud Monitoring offre un livello utilizzabile senza costi aggiuntivi.

Prima di iniziare

Per visualizzare un piano di query o eseguire il tracciamento end-to-end, devi disporre di autorizzazioni IAM specifiche. Crea un ruolo personalizzato e aggiungi al suo interno l'autorizzazione IAM cloudtrace.traces.get. Poi aggiungi questo ruolo a ogni account utente che deve usare Query Insights.

Per visualizzare i piani di query e le relative viste end-to-end, nel progetto Google Cloud deve essere abilitata l'API Trace. Questa impostazione consente al tuo progetto Google Cloud di ricevere dati di traccia da origini autenticate senza costi aggiuntivi. Questi dati possono aiutarti a rilevare e diagnosticare problemi di prestazioni nell'istanza.

Per verificare che l'API Trace sia abilitata, segui questi passaggi:

  1. Nella console Google Cloud, vai ad API e servizi:

    Vai ad API e servizi

  2. Fai clic su Abilita API e servizi.
  3. Nella barra di ricerca, inserisci Trace API.
  4. Se viene visualizzato il messaggio API abilitata, significa che l'API è abilitata e non devi fare nulla. Altrimenti, fai clic su Abilita.

Abilita Query Insights

Le metriche di Query Insights sono criptate at-rest. Gli utenti che hanno accesso alla dashboard di Cloud SQL possono accedere alle metriche di Query Insights nella dashboard di Query Insights. Se hai l'autorizzazione per aggiornare le istanze, puoi configurare Query Insights. Per un elenco delle autorizzazioni necessarie per le istanze Cloud SQL, consulta Controllo dell'accesso al progetto Cloud SQL. Se non hai queste autorizzazioni e vuoi abilitare Query Insights nelle tue istanze, contatta l'amministratore.

Console

Abilitare Query Insights per un'istanza
  1. Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.

    Vai a Istanze Cloud SQL

  2. Per aprire la pagina Panoramica di un'istanza, fai clic sul nome dell'istanza.
  3. Nel riquadro Configurazione, fai clic su Modifica configurazione.
  4. Nella sezione Opzioni di configurazione, espandi Approfondimenti sulle query.
  5. Seleziona la casella di controllo Attiva Query Insights.
  6. (Facoltativo) Seleziona una o più delle seguenti opzioni di Query Insights:

    Archiviare gli indirizzi IP dei client

    Valore predefinito: false

    Archivia gli indirizzi IP dei client da cui provengono le query e ti aiuta a raggruppare questi dati per eseguire metriche su di essi. Le query provengono da più host. L'analisi dei grafici per le query provenienti dagli indirizzi IP dei clienti può aiutare a identificare l'origine di un problema.

    Archiviare i tag dell'applicazione

    Valore predefinito: false

    Archivia i tag delle applicazioni che aiutano a determinare le API e le route modello-visualizzazione-controller (MVC) che effettuano le richieste e raggruppa i dati per eseguire le metriche su di essi. Questa opzione richiede di commentare le query con un set specifico di tag utilizzando la libreria di strumentazione automatica open source di mappatura relazionale a oggetti (ORM) sqlcommenter. Queste informazioni consentono a Query Insights di identificare l'origine di un problema e l'MVC da cui proviene il problema. I percorsi delle applicazioni facilitano il monitoraggio delle applicazioni.

    Personalizzare la lunghezza delle query

    Valore predefinito: 1024

    Imposta il limite di lunghezza delle query su un valore specificato compreso tra 256 e 4500 byte. Una query di lunghezza superiore è più utile per le query analitiche, ma richiede anche più memoria. La modifica della lunghezza della query richiede il riavvio dell'istanza. Puoi comunque aggiungere tag alle query che superano il limite di lunghezza.

    Impostare la frequenza di campionamento massima

    Valore predefinito: 5

    Imposta la frequenza di campionamento massima. La frequenza di campionamento è il numero di esempi di piano di query eseguiti che vengono acquisiti al minuto in tutti i database dell'istanza. Modifica questo valore inserendo un numero compreso tra 0 (per disabilitare il campionamento) e 20. È probabile che l'aumento della frequenza di campionamento fornisca più punti dati, ma potrebbe aumentare il sovraccarico delle prestazioni.

  7. Fai clic su Salva.
Abilitare Query Insights per più istanze
  1. Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.

    Vai a Istanze Cloud SQL

  2. Fai clic sul menu Altre azioni in qualsiasi riga.
  3. Seleziona Attiva Query Insights.
  4. Nella finestra di dialogo, seleziona la casella di controllo Abilita Query Insights per più istanze .
  5. Fai clic su Abilita.
  6. Nella finestra di dialogo successiva, seleziona le istanze per le quali vuoi abilitare Query Insights.
  7. Fai clic su Attiva Query Insights.

gcloud

Per abilitare Query Insights per un'istanza Cloud SQL utilizzando gcloud, esegui gcloud sql instances patch con il flag --insights-config-query-insights-enabled come segue dopo aver sostituito INSTANCE_ID con l'ID dell'istanza.

gcloud sql instances patch INSTANCE_ID \
--insights-config-query-insights-enabled
  

Inoltre, utilizza uno o più dei seguenti flag facoltativi:

  • --insights-config-record-client-address

    Archivia gli indirizzi IP dei client da cui provengono le query e ti aiuta a raggruppare questi dati per eseguire metriche su di essi. Le query provengono da più host. L'analisi dei grafici per le query provenienti dagli indirizzi IP dei clienti può aiutare a identificare l'origine di un problema.

  • --insights-config-record-application-tags

    Archivia i tag delle applicazioni che aiutano a determinare le API e le route modello-visualizzazione-controller (MVC) che effettuano le richieste e raggruppa i dati per eseguire le metriche su di essi. Questa opzione richiede di commentare le query con un insieme specifico di tag. Puoi farlo utilizzando la libreria di strumentazione automatica ORM (Object-Relational Mapping) open source sqlcommenter. Queste informazioni consentono a Query Insights di identificare l'origine di un problema e l'MVC da cui proviene. I percorsi delle applicazioni facilitano il monitoraggio delle applicazioni.

  • --insights-config-query-string-length

    Imposta il limite predefinito di lunghezza delle query su un valore specificato compreso tra 256 e 4500 byte. La lunghezza predefinita delle query è 1024 byte. Una query di lunghezza superiore è più utile per le query analitiche, ma richiede anche più memoria. La modifica della lunghezza della query richiede il riavvio dell'istanza. Puoi comunque aggiungere tag alle query che superano il limite di lunghezza.

  • --query_plans_per_minute

    Per impostazione predefinita, vengono acquisiti al minuto un massimo di 5 esempi di piano di query eseguiti in tutti i database dell'istanza. Modifica questo valore inserendo un numero compreso tra 0 (per disabilitare il campionamento) e 20. È probabile che l'aumento della frequenza di campionamento fornisca più punti dati, ma potrebbe incrementare il sovraccarico delle prestazioni.

Sostituisci quanto segue:

gcloud sql instances patch INSTANCE_ID \
--insights-config-query-insights-enabled \
--insights-config-query-string-length=INSIGHTS_CONFIG_QUERY_STRING_LENGTH \
--query_plans_per_minute=QUERY_PLANS_PER_MINUTE \
--insights-config-record-application-tags \
--insights-config-record-client-address \
--tier=API_TIER_STRING \
--region=REGION
  

REST v1

Per abilitare Query Insights per un'istanza Cloud SQL utilizzando l'API REST, chiama il metodo instances.patch con le impostazioni insightsConfig.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • project-id: l'ID progetto.
  • instance-id: l'ID istanza.

Metodo HTTP e URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

Corpo JSON della richiesta:

{
  "settings" : { "insightsConfig" : { "queryInsightsEnabled" : true } }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2021-01-28T22:43:40.009Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Terraform

Per utilizzare Terraform per abilitare Query Insights per un'istanza Cloud SQL, imposta il flag query_insights_enabled su true. Inoltre, puoi utilizzare uno o più dei seguenti flag facoltativi:

  • query_string_length: il valore predefinito è 1024 e puoi configurarlo su un valore compreso tra 256 e 4500 in byte.
  • record_application_tags: imposta il valore su true se vuoi registrare i tag dell'applicazione dalla query.
  • record_client_address: imposta il valore su true se vuoi registrare l'indirizzo IP del client.
  • query_plans_per_minute: il valore predefinito è 5 e puoi configurarlo su un valore compreso tra 5 e 20.
  • Ecco un esempio:
    resource "google_sql_database_instance" "INSTANCE_NAME" {
     name                = "INSTANCE_NAME"
     database_version    = "POSTGRESQL_VERSION"
     region              = "REGION"
     root_password       = "PASSWORD"
     deletion_protection = false # set to true to prevent destruction of the resource
     settings {
       tier = "DB_TIER"
       insights_config {
         query_insights_enabled  = true
         query_string_length     = 2048 # Optional
         record_application_tags = true # Optional
         record_client_address   = true # Optional
         query_plans_per_minute  = 10 # Optional
       }
     }
    }
    

    Per applicare la configurazione Terraform in un progetto Google Cloud, completa i passaggi nelle sezioni seguenti.

    prepara Cloud Shell

    1. Avvia Cloud Shell.
    2. Imposta il progetto Google Cloud predefinito a cui vuoi applicare le configurazioni Terraform.

      Devi eseguire questo comando una sola volta per progetto e puoi eseguirlo in qualsiasi directory.

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

      Se imposti valori espliciti nel file di configurazione Terraform, le variabili di ambiente vengono sostituite.

    Prepara la directory

    Ogni file di configurazione Terraform deve avere una propria directory (detta anche modulo principale).

    1. In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome del file deve avere l'estensione .tf, ad esempio main.tf. In questo tutorial, il file è indicato come main.tf.
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. Se stai seguendo un tutorial, puoi copiare il codice campione in ogni sezione o passaggio.

      Copia il codice campione nel file main.tf appena creato.

      Se vuoi, copia il codice da GitHub. Questa opzione è consigliata se lo snippet Terraform fa parte di una soluzione end-to-end.

    3. Esamina e modifica i parametri di esempio da applicare al tuo ambiente.
    4. Salva le modifiche.
    5. Inizializza Terraform. Devi eseguire questa operazione una sola volta per directory.
      terraform init

      Facoltativamente, per utilizzare la versione più recente del provider Google, includi l'opzione -upgrade:

      terraform init -upgrade

    Applica le modifiche

    1. Rivedi la configurazione e verifica che le risorse che Terraform creerà o aggiornerà corrispondano alle tue aspettative:
      terraform plan

      Apporta le correzioni necessarie alla configurazione.

    2. Applica la configurazione Terraform eseguendo il comando seguente e inserendo yes al prompt:
      terraform apply

      Attendi finché Terraform non visualizza il messaggio "Applicazione completata".

    3. Apri il progetto Google Cloud per visualizzare i risultati. Nella console Google Cloud, vai alle risorse nell'interfaccia utente per assicurarti che Terraform le abbia create o aggiornate.

    Le metriche dovrebbero essere disponibili in Query Insights entro pochi minuti dal completamento della query. Esamina le norme sulla conservazione dei dati di Cloud Monitoring. Le tracce di Query Insights sono archiviate in Cloud Trace. Consulta le norme sulla conservazione dei dati di Cloud Trace.

    Visualizzare la dashboard Query Insights

    La dashboard Query Insights mostra il carico delle query in base ai fattori selezionati. Il carico delle query è una misurazione del lavoro totale 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 aprire la dashboard di Query Insights, segui questi passaggi:

    1. Per aprire la pagina Panoramica di un'istanza, fai clic sul nome dell'istanza.
    2. Seleziona la scheda Query Insights nel pannello di navigazione a sinistra o fai clic sul link Vai a Query Insights per informazioni più approfondite su query e rendimento.

    Si apre la dashboard di Query Insights. Mostra le seguenti informazioni sull'istanza:

    Mostra la dashboard di Query Insights, con menu a discesa per database, utenti e indirizzi. A destra dei menu a discesa è presente un filtro per impostare un intervallo di tempo. Inoltre, un grafico mostra il carico del database per le query principali. Nella parte inferiore del grafico sono presenti caselle di selezione per capacità della CPU, attesa di CPU e CPU, attesa I/O e attesa di blocco, nonché una scheda per le query e i tag.
    • Database: filtra il carico delle query su un database specifico o in tutti i database.
    • Utente: filtra il carico delle query da un account utente specifico.
    • Indirizzo client: filtra il carico delle query da un indirizzo IP specifico.
    • Intervallo di tempo: filtra il carico delle query in base a intervalli di tempo, ad esempio ora, giorno, settimana, mese o un intervallo personalizzato.
    • Grafico del carico del database: mostra il grafico del carico della query, basato sui dati filtrati.
    • Capacità CPU, attesa CPU e CPU, attesa IO e attesa blocco: i filtri vengono caricati in base alle opzioni selezionate. Per i dettagli su ciascuno di questi filtri, consulta Visualizzare il carico del database per le query principali.
    • Query e tag. Filtra il carico delle query in base a una query selezionata o a un tag di query SQL selezionato. Consulta Filtrare il carico del database.

    Visualizza il carico del database per tutte le query

    Il carico delle query del database è una misura del lavoro (in secondi CPU) nel tempo delle query eseguite nel database selezionato. Ogni query in esecuzione utilizza o è in attesa di risorse della CPU, risorse di I/O o di blocco delle risorse. Il carico delle query del database è il rapporto tra il tempo impiegato da tutte le query completate in un determinato intervallo di tempo e le ore effettive.

    La dashboard di primo livello di Query Insights mostra il grafico Carico del database: tutte le query principali. I menu a discesa sulla dashboard consentono di filtrare il grafico in base a un database, a un utente o a un indirizzo client specifico.

    Mostra il grafico del carico del database con un carico per capacità della CPU, attesa CPU e CPU, attesa IO e attesa blocco.

    Le linee colorate del grafico mostrano il carico della query, suddiviso in quattro categorie:

    • Capacità CPU: il numero di CPU disponibili nell'istanza.
    • Attesa CPU e CPU: il rapporto tra il tempo impiegato dalle query in stato attivo e le ore effettive. Le attese di I/O e di blocco non bloccano le query in stato attivo. Questa metrica potrebbe significare che la query sta utilizzando la CPU o è in attesa che lo scheduler Linux pianifichi il processo del server che esegue la query mentre altri processi utilizzano la CPU.

    • Attesa I/O: il rapporto tra il tempo impiegato dalle query in attesa di I/O e le ore effettive. L'attesa IO include attesa di lettura I/O e attesa di scrittura IO.

      Consulta la tabella degli eventi PostgreSQL.

      Se vuoi un'analisi dettagliata delle informazioni relative alle attese di I/O, puoi visualizzarla in Cloud Monitoring. Per saperne di più, consulta Metriche Cloud SQL.

    • Attesa blocco: il rapporto tra il tempo impiegato dalle query in attesa dei blocchi e le ore effettive. Include Lock Waits, LwLock Waits e Buffer Pin Lock Attendi. Per visualizzare un'analisi dettagliata delle informazioni relative alle attese dei blocchi, utilizza Cloud Monitoring. Per saperne di più, consulta Metriche Cloud SQL.

    Esamina il grafico e utilizza le opzioni di filtro per esplorare queste domande:

    1. Il carico delle query è elevato? Il grafico è in aumento o in aumento nel tempo? Se non noti un carico elevato, significa che il problema non è legato alla tua query.
    2. Quanto tempo è stato elevato il carico? È alto solo ora o da molto tempo? Usa il selettore di intervalli per selezionare vari periodi di tempo e scoprire quanto è durato il problema. Aumenta lo zoom per visualizzare una finestra temporale in cui vengono osservati picchi di carico delle query. Diminuisci lo zoom per visualizzare fino a una settimana della sequenza temporale.
    3. Qual è la causa del carico elevato? Puoi selezionare le opzioni per esaminare la capacità della CPU, l'attesa per CPU e CPU, per il blocco o per l'attesa IO. Il grafico per ciascuna di queste opzioni è di un colore diverso, in modo da poter individuare facilmente quella con il carico più elevato. La linea blu scuro nel grafico mostra la capacità massima della CPU del sistema. Consente di confrontare il carico delle query con la capacità massima del sistema della CPU. Questo confronto consente di determinare se un'istanza sta esaurendo le risorse della CPU.
    4. Quale database sta ricevendo il carico? Seleziona database diversi dal menu a discesa Database per trovare i database con i carichi più elevati.
    5. Utenti o indirizzi IP specifici causano caricamenti maggiori? Seleziona diversi utenti e indirizzi dai menu a discesa per identificare quelli che stanno causando un caricamento più elevato.

    Filtra il carico del database

    Puoi filtrare il carico del database per query o tag.

    Filtra per query

    La tabella Query fornisce una panoramica delle query che causano il carico più elevato. La tabella mostra tutte le query normalizzate per la finestra temporale e le opzioni selezionate nella dashboard di Query Insights. Ordina le query in base al tempo totale di esecuzione nella finestra temporale selezionata.

    Mostra il grafico del carico del database con un carico per le query, con i filtri selezionati per capacità della CPU, attesa CPU e CPU, attesa IO e attesa blocco.

    Per ordinare la tabella, seleziona un'intestazione di colonna o una proprietà da Filtra query. La tabella mostra le seguenti proprietà:

    • Query: la stringa di query normalizzata. Query Insights mostra solo 1024 caratteri nella stringa di query per impostazione predefinita.

      Le query con l'etichetta UTILITY COMMAND di solito includono i comandi BEGIN, COMMIT e EXPLAIN o i comandi wrapper.

    • Database: il database su cui è stata eseguita la query.

    • Caricamento per tempo totale/Caricamento per CPU/Carico per attesa IO/Caricamento per attesa blocco: Le opzioni in base alle quali puoi filtrare query specifiche per trovare il carico più grande.

    • Tempo medio di esecuzione (ms): il tempo medio di esecuzione della query.

    • volte chiamate: il numero di volte in cui l'applicazione ha chiamato la query.

    • Media righe restituite: il numero medio di righe restituite per la query.

    Query Insights archivia e visualizza solo le query normalizzate. Per impostazione predefinita, Query Insights non raccoglie indirizzi IP o informazioni sui tag. Puoi abilitare Query Insights per raccogliere queste informazioni e, se necessario, disabilitare la raccolta. Le tracce del piano di query non raccolgono né archiviano i valori della costante e rimuove eventuali informazioni PII che la costante potrebbe mostrare.

    Per PostgreSQL 9.6 e 10, Query Insights visualizza le query normalizzate, ovvero ? sostituisce il valore della costante letterale. Nell'esempio seguente, la costante del nome viene rimossa e ? la sostituisce.

    UPDATE
      "demo_customer"
    SET
      "customer_id" = ?::uuid,
      "name" = ?,
      "address" = ?,
      "rating" = ?,
      "balance" = ?,
      "current_city" = ?,
      "current_location" = ?
    WHERE
      "demo_customer"."id" = ?
    

    Per PostgreSQL 11 e versioni successive, $1, $2 e così via, sostituisci i valori costanti letterali.

    UPDATE
      "demo_customer"
    SET
      "customer_id" = $1::uuid,
      "name" = $2,
      "address" = $3,
      "rating" = $4,
      "balance" = $5,
      "current_city" = $6,
      "current_location" = $7
    WHERE
      "demo_customer"."id" = $8
    

    Filtra per tag di query

    Per risolvere i problemi di un'applicazione, devi prima aggiungere tag alle query SQL. I tag di carico delle query forniscono una suddivisione del carico di query del tag selezionato nel tempo.

    Query Insights offre un monitoraggio incentrato sulle applicazioni per diagnosticare i problemi di prestazioni. Se sei responsabile dell'intero stack di applicazioni, Query Insights consente di monitorare le query da una visualizzazione dell'applicazione. Il tagging delle query consente di individuare problemi nei costrutti di livello superiore, ad esempio con la logica di business o un microservizio.

    Puoi taggare le query in base alla logica di business, ad esempio i tag pagamento, inventario, analisi aziendale o spedizione. Puoi quindi trovare il carico delle query creato dalle varie logiche di business. Ad esempio, potresti osservare eventi imprevisti, quali picchi per un tag di analisi aziendale alle 13:00 o una crescita anomala di un servizio di pagamento che registra tendenze nella settimana precedente.

    Per calcolare il carico del database per il tag, Query Insights utilizza la quantità di tempo impiegato da ogni query che utilizza il tag selezionato. Lo strumento calcola il tempo di completamento in corrispondenza del limite dei minuti utilizzando l'ora effettiva.

    Nella dashboard Query Insights, seleziona Tag per visualizzare la tabella dei tag. La tabella ordina i tag in base al carico totale in base al tempo totale.

    Mostra la dashboard Query Insights, con carico per i tag e un elenco di tag.

    Puoi ordinare la tabella selezionando una proprietà da Filtra tag o facendo clic su un'intestazione di colonna. La tabella mostra le seguenti proprietà:

    • Azione, Controller, Framework, Route, Applicazione, driver DB: ogni proprietà aggiunta alle query viene visualizzata come colonna. Se vuoi filtrare in base ai tag, devi aggiungere almeno una di queste proprietà.
    • Caricamento per tempo totale/Caricamento per CPU/Carico per attesa IO/Caricamento per attesa blocco: opzioni per filtrare query specifiche in modo da trovare il carico più grande per ciascuna opzione.
    • Tempo medio di esecuzione (ms): il tempo medio di esecuzione della query.
    • Media righe restituite: il numero medio di righe restituite per la query.
    • volte chiamate: il numero di volte in cui l'applicazione ha chiamato la query.
    • Database: il database su cui è stata eseguita la query.

    Esaminare una query o un tag specifico

    Per determinare se la causa principale del problema è una query o un tag, procedi nel seguente modo rispettivamente nella scheda Query o Tag:

    1. Per ordinare l'elenco in ordine decrescente, fai clic sull'intestazione Carica per tempo totale.
    2. Fai clic sulla query o sul tag in cima all'elenco. Presenta il carico più elevato e richiede più tempo delle altre.

    Si apre una dashboard con i dettagli della query o del tag selezionato.

    Esaminare un carico di query specifico

    La dashboard per una query selezionata ha il seguente aspetto:

    Mostra i grafici del carico e della latenza del database per una query specifica.

    Il grafico Carico database - query specifica mostra una misura del lavoro (in secondi CPU) nel tempo per la query normalizzata eseguita nella query selezionata. Per calcolare il carico, viene utilizzata la quantità di tempo impiegato dalle query normalizzate completate in corrispondenza del limite dei minuti rispetto all'orario effettivo. Nella parte superiore della tabella vengono visualizzati i primi 1024 caratteri della query normalizzata, con i valori letterali rimossi per i motivi di aggregazione e PII.

    Mostra il grafico del carico del database con un carico per una query specifica, con i filtri selezionati per capacità della CPU, attesa CPU e CPU, attesa IO e attesa blocco.

    Come nel grafico delle query totali, puoi filtrare il carico per una query specifica in base a Database, Utente e Indirizzo cliente. Il carico delle query è suddiviso in Capacità CPU, Attesa CPU e CPU, Attesa I/O e Attesa blocco.

    Esaminare un carico specifico di query con tag

    La dashboard per un tag selezionato viene visualizzata come segue. Ad esempio, se tutte le query provenienti da un pagamento dei microservizi sono taggate come payment, puoi visualizzare il tag payment per visualizzare la quantità di caricamento di query in tendenza.

    Mostra i grafici del carico del database e della latenza nella pagina per un tag specifico.

    Il grafico Carico database - tag specifici mostra una misura del lavoro (in secondi CPU) nel tempo per cui le query corrispondenti ai tag selezionati hanno eseguito nel database selezionato. Come nel grafico delle query totali, puoi filtrare il carico per un tag specifico in base a Database, Utente e Indirizzo cliente.

    Esaminare le operazioni in un piano di query campionato

    Un piano di query prende un campione della query e lo suddivide in singole operazioni. Spiega e analizza ogni operazione della query.

    Il grafico Esempi di piani di query mostra tutti i piani di query in esecuzione in momenti specifici e il tempo necessario per l'esecuzione di ciascun piano. Puoi modificare la frequenza di acquisizione degli esempi di piani di query al minuto. Consulta Attivare gli insight sulle query.

    Un grafico di piani di query di esempio, con l'ora in cui sono stati eseguiti nella parte inferiore del grafico (asse x) e il numero di secondi in cui sono stati eseguiti sulla destra (asse y).

    Per impostazione predefinita, il riquadro a destra mostra i dettagli del piano di query di esempio che richiede più tempo, come visibili nel grafico Esempi di piani di query. Per visualizzare i dettagli di un altro piano di query di esempio, fai clic sul cerchio pertinente nel grafico. I dettagli espansi mostrano un modello di tutte le operazioni nel piano di query. Ogni operazione mostra la latenza, le righe restituite e il costo dell'operazione. Quando selezioni un'operazione, puoi visualizzare ulteriori dettagli, ad esempio i blocchi di hit condivisi, il tipo di schema, i loop e le righe del piano.

    Il piano di query mostra la latenza e i costi di ogni esecuzione
         della query. Inizia con un'aggregazione, che restituisce 48 righe,
         con una latenza di 31,06 ms e un costo di 296,34. L'operazione successiva è un loop nidificato, che si divide in un altro loop nidificato e un materiale si material.
         Il loop nidificato si divide in un altro loop nidificato e una scansione dell'indice. Il materializzazione porta a una scansione in sequenza.

    Prova a circoscrivere il problema esaminando le seguenti domande:

    1. Qual è il consumo delle risorse?
    2. Qual è la relazione con altre query?
    3. Il consumo cambia nel tempo?

    Esamina la latenza

    La latenza è il tempo impiegato per il completamento della query normalizzata, in tempo reale. Puoi utilizzare il grafico Latenza per esaminare la latenza nella query o nel tag. La dashboard della latenza mostra le latenze del 50°, 95° e 99° percentile per scoprire i comportamenti anomali.

    L'immagine seguente mostra il grafico del carico del database al 50° percentile per una query specifica con i filtri selezionati per capacità della CPU, attesa di CPU e CPU, attesa I/O e attesa blocco.

    Mostra il grafico della latenza della query per una query specifica con i filtri selezionati per capacità della CPU, attesa di CPU e CPU, attesa IO e attesa blocco.

    La latenza delle query parallele viene misurata in tempo reale, anche se il carico delle query può essere maggiore per la query, a causa dell'utilizzo di più core per eseguire parte della query.

    Prova a circoscrivere il problema esaminando le seguenti domande:

    1. Qual è la causa del carico elevato? Seleziona le opzioni per esaminare capacità della CPU, attesa CPU e CPU, attesa I/O o attesa blocco.
    2. Quanto tempo è stato elevato il carico? È solo alto ora? O è stata alta per molto tempo? Modifica l'intervallo di tempo per trovare la data e l'ora in cui il caricamento ha iniziato a generare prestazioni scadenti.
    3. Ci sono stati picchi di latenza? Modifica la finestra temporale per studiare la latenza storica per la query normalizzata.

    Trace l'origine del problema

    Quando individui le aree e i momenti in cui il carico era il massimo, identifica l'origine del problema utilizzando il tracciamento per visualizzare in dettaglio.

    Per aiutarti a identificare l'origine specifica del problema, ad esempio un modello, una vista, un controller, una route, un host o un utente, Query Insights fornisce una visualizzazione della traccia dell'applicazione end-to-end integrata nel contesto. Questa vista ti aiuta a capire cosa succede a livello di database per una richiesta specifica e a trovare l'origine di una query problematica in base a modello, vista, controller e route.

    Se abiliti OpenCensus o OpenTelemetry, al database vengono inviate le informazioni relative a opencensus span, insieme alle informazioni sui tag all'interno dei commenti SQL. Qualsiasi traccia dall'applicazione a Cloud Logging è collegata alle tracce del piano di query del database per identificare l'origine del problema.

    Fai clic sulla scheda End to end nella schermata Query di esempio per esaminare la traccia nel contesto.

    Seleziona un tag end-to-end per visualizzare informazioni specifiche sul tag. Il riepilogo mostra le RPC e la durata totale in ms per ogni operazione per il tag in questione.

    Per determinare il client e l'utente che causano il problema, utilizza le tabelle Indirizzi cliente principali e Utenti principali per trovare i caricamenti più elevati. Puoi aggiungere un utente o un indirizzo IP al filtro per analizzare ulteriormente un indirizzo utente o client specifico. I dettagli nelle tabelle includono la percentuale di carico della query, il tempo medio di esecuzione in millisecondi e il numero di chiamate.

    L'immagine mostra che per gli indirizzi dei principali clienti, il carico era
         al 100%, il tempo di esecuzione medio è stato di 19.568 secondi e i tempi
         chiamati sono stati 1226. Per gli utenti principali, l'utente Postgres ha registrato il 100% del carico, ha avuto un tempo di esecuzione medio di 19.568 ms ed è stato chiamato 1226 volte.

    Puoi utilizzare Cloud Trace per visualizzare il tracciamento end-to-end per ogni passaggio nel piano di query. Nella dashboard di Query Insights, fai clic sul link Visualizza nella traccia per aprire lo strumento Cloud Trace. Il grafico traccia mostra tutte le tracce eseguite per il periodo selezionato.

    Il grafico delle tracce mostra tutte le tracce eseguite per il periodo selezionato, in questo caso un'ora. La pagina ha anche una tabella che mostra la latenza, il metodo HTTP, l'URL e l'ora in cui è stata eseguita la traccia.cd

    Per maggiori dettagli, vedi Trovare e visualizzare le tracce.

    Aggiungi tag alle query SQL

    Il tagging delle query SQL semplifica la risoluzione dei problemi dell'applicazione. Puoi utilizzare sqlcommenter per aggiungere tag alle query SQL automaticamente o manualmente.

    Utilizzo di sqlcommenter con ORM

    Quando utilizzi ORM anziché scrivere direttamente query SQL, potresti non trovare il codice dell'applicazione che causa problemi di prestazioni. Potresti anche avere problemi ad analizzare il modo in cui il codice dell'applicazione influisce sulle prestazioni delle query. Per risolvere questo problema, Query insight offre una libreria open source chiamata sqlcommenter. Questa libreria è utile per sviluppatori e amministratori che utilizzano strumenti ORM per rilevare il codice dell'applicazione che causa problemi di prestazioni.

    Se utilizzi ORM e sqlcommenter insieme, i tag vengono creati automaticamente. Non è necessario aggiungere o modificare il codice nell'applicazione.

    Puoi installare sqlcommenter sul server delle applicazioni. La libreria di strumentazione consente di propagare le informazioni sull'applicazione relative al framework MVC al database insieme alle query sotto forma di commento SQL. Il database rileva questi tag e inizia a registrare e aggregare le statistiche per tag, che sono ortogonali alle statistiche aggregate per query normalizzate. Query Insights mostra i tag per consentirti di sapere quale applicazione causa il carico delle query e può trovare il codice dell'applicazione che causa problemi di prestazioni.

    Quando esamini i risultati nei log del database SQL, questi vengono visualizzati come segue:

    SELECT * from USERS /*action='run+this',
    controller='foo%3',
    traceparent='00-01',
    tracestate='rojo%2'*/
    

    I tag supportati includono il nome del controller, la route, il framework e l'azione.

    Il set di strumenti ORM in sqlcommenter è supportato per i seguenti linguaggi di programmazione:

    Python
    • Django
    • psycopg2
    • Sqlalchemia
    • Flask
    Java
    • Ibernazione
    • Primavera
    Ruby
    • Rotaie
    Node.js
    • Knex.js
    • Sequelize.js
    • Express.js

    Per ulteriori informazioni su sqlcommenter e su come utilizzarlo nel framework ORM, consulta la documentazione di sqlcommenter.

    Utilizzare sqlcommenter per aggiungere tag

    Se non utilizzi ORM, devi aggiungere manualmente i tag o i commenti sqlcommenter nel formato di commento SQL corretto alla tua query SQL. Devi inoltre potenziare ogni istruzione SQL con un commento contenente una coppia chiave-valore serializzata. Utilizza almeno una delle seguenti chiavi:

    • action=''
    • controller=''
    • framework=''
    • route=''
    • application=''
    • db driver=''

    Query Insights ignora tutte le altre chiavi.

    Disabilita Query Insights

    Console

    Per disabilitare Query Insights per un'istanza Cloud SQL utilizzando la console Google Cloud, segui questi passaggi:

    1. Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.

      Vai a Istanze Cloud SQL

    2. Per aprire la pagina Panoramica di un'istanza, fai clic sul nome dell'istanza.
    3. Nel riquadro Configurazione, fai clic su Modifica configurazione.
    4. Nella sezione Opzioni di configurazione, espandi Approfondimenti sulle query.
    5. Deseleziona la casella di controllo Attiva Query Insights.
    6. Fai clic su Salva.

    gcloud

    Per disabilitare Query Insights per un'istanza Cloud SQL utilizzando gcloud, esegui gcloud sql instances patch con il flag --no-insights-config-query-insights-enabled come segue, dopo aver sostituito INSTANCE_ID con l'ID dell'istanza.

    gcloud sql instances patch INSTANCE_ID \
    --no-insights-config-query-insights-enabled
      

    REST

    Per disabilitare Query Insights per un'istanza Cloud SQL utilizzando l'API REST, chiama il metodo instances.patch con queryInsightsEnabled impostato su false come segue.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • project-id: l'ID progetto.
    • instance-id: l'ID istanza.

    Metodo HTTP e URL:

    PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

    Corpo JSON della richiesta:

    {
      "settings" : { "insightsConfig" : { "queryInsightsEnabled" : false } }
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2021-01-28T22:43:40.009Z",
      "operationType": "UPDATE",
      "name": "operation-id",
      "targetId": "instance-id",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    

    Passaggi successivi

    • Consulta le metriche di Cloud SQL. Le stringhe di tipo di metrica Query Insights iniziano con database/postgresql/insights.