Utilizzare Query Insights per migliorare le prestazioni delle query

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

Puoi utilizzare l'assistenza di Gemini in Database per osservare e risolvere i problemi delle tue risorse Cloud SQL per PostgreSQL. Per ulteriori informazioni, consulta Osservare e risolvere i problemi con l'assistenza di Gemini.

Introduzione

Query Insights consente di rilevare, diagnosticare e prevenire i problemi di prestazioni delle query per i database Cloud SQL. Supporta il monitoraggio intuitivo e fornisce informazioni diagnostiche che non si limitano al rilevamento per identificare la causa principale dei problemi di prestazioni.

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

Query Insights ti aiuta a migliorare le prestazioni delle query Cloud SQL guidandoti tramite i seguenti passaggi:

  1. Visualizza il carico del database per le query principali.
  2. Identifica una query o un tag potenzialmente problematici.
  3. Esamina la query o il tag per identificare i problemi.
  4. Rintraccia 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 gli Approfondimenti sulle query. Puoi accedere a una settimana di dati nella dashboard Approfondimenti sulle query.

Query Insights non occupa spazio di archiviazione nell'istanza Cloud SQL. Le metriche vengono archiviate in Cloud Monitoring. Per le richieste API, consulta i prezzi di Cloud Monitoring. Cloud Monitoring dispone di un livello che puoi utilizzare senza costi aggiuntivi.

Prima di iniziare

Per visualizzare un piano di query o eseguire il monitoraggio end-to-end, hai bisogno di autorizzazioni IAM specifiche. Crea un ruolo personalizzato e aggiungi l'autorizzazione IAM cloudtrace.traces.get. Aggiungi questo ruolo a ogni account dell'utente che deve utilizzare Query Insights.

Per visualizzare i piani di query e le relative visualizzazioni end-to-end, nel progetto Google Cloud deve essere attivata l'API Trace. Questa impostazione consente al tuo progetto Google Cloud di ricevere dati traccianti 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:

  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 altro. In caso contrario, fai clic su Abilita.

Abilita Query Insights

Le metriche di Query Insights vengono criptate in stato di riposo. Gli utenti che hanno accesso alla dashboard Cloud SQL possono accedere alle metriche di Query Insights nella dashboard Query Insights. Se disponi dell'autorizzazione per aggiornare le istanze, puoi configurare gli Approfondimenti sulle query. Per un elenco delle autorizzazioni richieste per le istanze Cloud SQL, consulta Controllo dell'accesso ai progetti Cloud SQL. Se non disponi di queste autorizzazioni e vuoi attivare gli Approfondimenti sulle query nelle tue istanza, contatta l'amministratore.

Console

Abilita 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 Approfondimenti sulle query:
  7. Archivia gli indirizzi IP client

    Valore predefinito: false

    Memorizza gli indirizzi IP dei client da cui provengono le query e ti aiuta a gruppare questi dati per generare le metriche corrispondenti. Le query provengono da più di un host. La revisione dei grafici per le query provenienti dagli indirizzi IP dei client può aiutarti a identificare la fonte di un problema.

    Archivia i tag delle applicazioni

    Valore predefinito: false

    Memorizza i tag delle applicazioni che ti aiutano a determinare le API e i route modello-visualizzazione-controller (MVC) che effettuano 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 utilizzando la libreria di automazione dell'object-relational mapping (ORM) open source sqlcommenter. Queste informazioni aiutano Query Insights a identificare la fonte di un problema e il modello MVC da cui proviene. I percorsi delle applicazioni ti aiutano con il monitoraggio delle applicazioni.

    Personalizzare la lunghezza delle query

    Valore predefinito: 1024

    Imposta il limite di lunghezza della query su un valore specificato compreso tra 256 e 4500 byte. Le query con una lunghezza maggiore sono più utili per le query di analisi, ma richiedono anche più memoria. La modifica della lunghezza delle 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 acquisiti al minuto su tutti i database dell'istanza. Modifica questo valore scegliendo un numero compreso tra 0 (per disattivare il campionamento) e 20. È probabile che l'aumento della frequenza di campionamento fornisca più punti dati, ma potrebbe aumentare il sovraccarico delle prestazioni.

  8. Fai clic su Salva.
Abilita 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 una riga qualsiasi.
  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 Attiva.
  6. Nella finestra di dialogo successiva, seleziona le istanze per cui vuoi attivare Query Insights.
  7. Fai clic su Attiva Query Insights.

gcloud

Per attivare 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
  

Utilizza anche uno o più dei seguenti flag facoltativi:

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

    Memorizza gli indirizzi IP dei client da cui provengono le query e ti aiuta a gruppare questi dati per generare le metriche corrispondenti. Le query provengono da più di un host. La revisione dei grafici per le query provenienti dagli indirizzi IP dei client può aiutarti a identificare la fonte di un problema.

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

    Memorizza i tag delle applicazioni che ti aiutano a determinare le API e i route modello-visualizzazione-controller (MVC) che effettuano richieste e raggruppa i dati per eseguire le metriche su di essi. Questa opzione richiede di aggiungere commenti alle query con un insieme specifico di tag. A questo scopo, puoi utilizzare la libreria di automazione dell'analisi ORM (Object Relational Mapping) open source sqlcommenter. Queste informazioni aiutano Query Insights a identificare la fonte di un problema e il MVC da cui proviene. I percorsi delle applicazioni ti aiutano con il monitoraggio delle applicazioni.

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

    Imposta il limite predefinito per la lunghezza delle query su un valore specificato compreso tra 256 e 4500 byte. La lunghezza predefinita delle query è 1024 byte. Le query con una lunghezza maggiore sono più utili per le query di analisi, ma richiedono anche più memoria. La modifica della lunghezza delle 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 un massimo di cinque campioni di piano di query eseguiti al minuto su tutti i database dell'istanza. Modifica questo valore scegliendo un numero compreso tra 0 (per disattivare 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 attivare 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, apporta 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 attivare Query Insights per un'istanza Cloud SQL, imposta il query_insights_enabled flag su true. Inoltre, puoi utilizzare uno o più dei seguenti flag facoltativi:

  • query_string_length: il valore predefinito è 1024 e puoi impostarlo su un valore compreso tra 256 e 4500 in byte.
  • record_application_tags: imposta il valore su true se vuoi registrare i tag delle applicazioni 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 seguenti sezioni.

    Prepara Cloud Shell

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

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

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

      Le variabili di ambiente vengono sostituite se imposti valori espliciti nel file di configurazione Terraform.

    Prepara la directory

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

    1. In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome file deve avere l'estensione .tf, ad esempio main.tf. In questo tutorial, il file è denominato 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 main.tf appena creato.

      Se vuoi, copia il codice da GitHub. Questa opzione è consigliata quando 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

      Se vuoi, 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 sta per creare o aggiornare corrispondano alle tue aspettative:
      terraform plan

      Apporta le correzioni necessarie alla configurazione.

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

      Attendi che Terraform mostri il messaggio "Applicazione completata".

    3. Apri il tuo 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 vengono archiviate in Cloud Trace. Esamina le norme sulla conservazione dei dati di Cloud Trace.

    Visualizzare la dashboard Query Insights

    La dashboard Approfondimenti sulle query mostra il carico delle query in base ai fattori selezionati. Il carico delle query è una misura del lavoro totale 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 aprire la dashboard Approfondimenti sulle query:

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

    Si apre la dashboard Approfondimenti sulle query. Mostra le seguenti informazioni sull'istanza:

    Mostra la dashboard Approfondimenti sulle query, con menu a discesa per database, utenti e indirizzi. A destra dei menu a discesa, c'è 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, CPU e
         attesa CPU, attesa I/O e attesa blocco e una scheda per query e tag.
    • Database: filtra il carico delle query su un database specifico o su 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 delle query in base ai dati filtrati.
    • Capacità CPU, CPU e attesa CPU, attesa IO e attesa blocco: filtra i carichi in base alle opzioni selezionate. Per informazioni dettagliate 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 per le query eseguite nel database selezionato. Ogni query in esecuzione utilizza o è in attesa di risorse CPU, risorse I/O o risorse di blocco. 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 Approfondimenti sulle query di primo livello mostra il grafico Carico del database: tutte le query principali. I menu a discesa nella dashboard ti consentono di filtrare il grafico in base a un database, un utente o un indirizzo client specifico.

    Mostra il grafico del carico del database con un carico per la capacità della CPU, la CPU e
         l'attesa della CPU, l'attesa I/O e l'attesa del blocco.

    Le linee colorate nel grafico mostrano il carico delle query, suddiviso in quattro categorie:

    • Capacità CPU: il numero di CPU disponibili nell'istanza.
    • CPU e Attesa CPU: il rapporto tra il tempo impiegato dalle query in stato attivo e le ore effettive. Le attese I/O e di blocco non bloccano le query in stato attivo. Questa metrica potrebbe indicare che la query utilizza la CPU o è in attesa che lo scheduler di 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 I/O include attesa di lettura I/O e attesa di scrittura I/O.

      Consulta la tabella degli eventi di PostgreSQL.

      Se vuoi una suddivisione delle informazioni sulle attese IO, puoi visualizzarla in Cloud Monitoring. Per ulteriori informazioni, consulta le metriche Cloud SQL.

    • Attesa blocco: il rapporto tra il tempo impiegato dalle query in attesa di blocchi e le ore effettive. Include le attese per blocchi di tipo Lock, LwLock e BufferPin Lock. Per visualizzare una suddivisione delle informazioni relative alle attese dei blocchi, utilizza Cloud Monitoring. Per ulteriori informazioni, consulta le metriche Cloud SQL.

    Esamina il grafico e utilizza le opzioni di filtro per rispondere alle seguenti domande:

    1. Il carico delle query è elevato? Il grafico presenta picchi o è elevato nel tempo? Se non noti un carico elevato, il problema non riguarda la query.
    2. Da quanto tempo il carico è elevato? È alto solo ora o lo è da molto tempo? Utilizza il selettore di intervalli 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 vengono osservati picchi di carico delle query. Riduci lo zoom per visualizzare fino a una settimana della cronologia.
    3. Qual è la causa del carico elevato? Puoi selezionare le opzioni per esaminare la capacità della CPU, la CPU e l'attesa della CPU, l'attesa del blocco o l'attesa IO. Il grafico di ciascuna di queste opzioni è di un colore diverso, in modo da individuare facilmente quella con il carico più elevato. La linea blu scuro sul grafico mostra la capacità massima della CPU del sistema. Ti consente di confrontare il carico delle query con la capacità massima del sistema CPU. Questo confronto ti aiuta a determinare se le risorse della CPU di un'istanza stanno per esaurirsi.
    4. Quale database sta riscontrando il carico? Seleziona diversi database dal menu a discesa Database per trovare quelli con i carichi più elevati.
    5. Utenti o indirizzi IP specifici causano carichi più elevati? Seleziona diversi utenti e indirizzi dai menu a discesa per identificare quelli che causano carichi più elevati.

    Filtrare 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 maggior carico di query. La tabella mostra tutte le query normalizzate per la finestra temporale e le opzioni selezionate nella dashboard Approfondimenti sulle query. Ordina le query in base al tempo di esecuzione totale durante l'intervallo di tempo selezionato.

    Mostra il grafico del carico del database con un carico per le query, con
         filtri selezionati per capacità della CPU, CPU e
         attesa CPU, attesa I/O 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. Per impostazione predefinita, gli Approfondimenti sulle query mostrano solo 1024 caratteri nella stringa di query.

      Le query etichettate come UTILITY COMMAND in genere includono comandi o comandi wrapper BEGIN, COMMIT e EXPLAIN.

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

    • Carico per tempo totale/Carico per CPU/Carico per attesa IO/Carico per attesa blocco: le opzioni che ti consentono di filtrare query specifiche per trovare il carico maggiore.

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

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

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

    Approfondimenti sulle query memorizza e mostra solo le query normalizzate. Per impostazione predefinita, Query Insights non raccoglie indirizzi IP o informazioni sui tag. Puoi attivare Query Insights per raccogliere queste informazioni e, se necessario, disattivare la raccolta. Le tracce del piano di query non raccolgono né memorizzano valori costanti e rimuovono eventuali informazioni PII che la costante potrebbe mostrare.

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

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

    Per PostgreSQL versione 11 e successive, $1, $2 e così via sostituiscono i valori costanti litterali.

    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 query

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

    Query Insights fornisce un monitoraggio incentrato sulle applicazioni per diagnosticare i problemi di prestazioni delle applicazioni create utilizzando gli ORM. Se sei responsabile dell'intero stack di applicazioni, Query Insights fornisce il monitoraggio delle query da una vista dell'applicazione. Il tagging delle query ti aiuta a trovare problemi a livello di strutture di livello superiore, ad esempio con la logica di business o un microservizio.

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

    Per calcolare il carico del database per tag, Query Insights utilizza il tempo impiegato da ogni query che utilizza il tag selezionato. Lo strumento calcola il tempo di completamento al confine dei minuti utilizzando l'ora del sistema.

    Nella dashboard Approfondimenti sulle query, seleziona Tag per visualizzare la tabella dei tag. La tabella ordina i tag in base al loro carico totale per tempo totale.

    Mostra la dashboard Approfondimenti sulle query, con il carico per i tag e un elenco di tag.

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

    • Azione, Controller, Framework, Route, Application, DB driver: ogni proprietà aggiunta alle query viene visualizzata come colonna. Se vuoi filtrare per tag, devi aggiungere almeno una di queste proprietà.
    • Carico per tempo totale/Carico per CPU/Carico per attesa IO/Carico per attesa blocco: opzioni per filtrare query specifiche al fine di trovare il carico maggiore per ogni opzione.
    • Tempo di esecuzione medio (ms): il tempo medio di esecuzione della query.
    • Numero medio di righe restituite: il numero medio di righe restituite per la query.
    • Numero di 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 una query o un tag è la causa principale del problema, esegui le seguenti operazioni rispettivamente dalla 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 nella parte superiore dell'elenco. Ha il carico più elevato e richiede più tempo rispetto alle altre.

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

    Esaminare un carico delle query specifico

    La dashboard per una query selezionata viene visualizzata come segue:

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

    Il grafico Carico del database - query specifica mostra una misura del lavoro (in secondi CPU) nel tempo per la query normalizzata selezionata nella query selezionata. Per calcolare il carico, viene utilizzato il tempo impiegato dalle query normalizzate completate al confine del minuto rispetto al tempo effettivo. Nella parte superiore della tabella vengono visualizzati i primi 1024 caratteri della query normalizzata, con le lettere rimosse per motivi di aggregazione e PII.

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

    Come per il grafico delle query totali, puoi filtrare il carico per una query specifica in base a Database, Utente e Indirizzo client. Il carico delle query è suddiviso in capacità della CPU, CPU e attesa CPU, attesa I/O e attesa blocco.

    Esaminare un carico di query con tag specifico

    La dashboard per un tag selezionato viene visualizzata come segue. Ad esempio, se tutte le query di un pagamento di microservizi sono contrassegnate come payment, puoi vedere la quantità di query in tendenza visualizzando il tag payment.

    Mostra i grafici relativi al carico e alla latenza del database nella pagina per un
         tag specifico.

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

    Esaminare le operazioni in un piano di query campionato

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

    Il grafico Esempi di piano di query mostra tutti i piani di query in esecuzione in determinati momenti e il tempo necessario per l'esecuzione di ciascun piano. Puoi modificare la frequenza con cui vengono acquisiti i campioni di piano di query al minuto. Consulta Attivare Query Insights.

    Un grafico per i piani di query di esempio, con il momento in cui sono stati eseguiti nella parte inferiore del grafico (asse x) e il numero di secondi di esecuzione a destra (asse y).

    Per impostazione predefinita, il riquadro a destra mostra i dettagli del piano di query di esempio che richiede più tempo, come mostrato nel grafico Campioni di piano di query. Per visualizzare i dettagli di un altro piano di query di esempio, fai clic sul cerchio pertinente sul 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 il costo per ogni operazione eseguita per la query. Inizia con un aggregato che restituisce 48 righe, con una latenza di 31,06 ms e un costo di 296,34. L'operazione successiva è
         un ciclo nidificato, che si suddivide in un altro ciclo nidificato e un materialize.
         Il ciclo nidificato si suddivide in un altro ciclo nidificato e in una scansione dell'indice. La
         materializzazione genera una scansione della sequenza.

    Prova a restringere il problema esaminando le seguenti domande:

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

    Esamina la latenza

    La latenza è il tempo impiegato dalla query normalizzata per il completamento nelle ore effettive. Utilizza il grafico Latenza per esaminare la latenza della query o del tag. La dashboard della latenza mostra le latenze al 50°, 95° e 99° percentile per trovare 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, CPU e attesa CPU, attesa I/O e attesa blocco.

    Mostra il grafico della latenza delle query per una query specifica con i filtri selezionati per capacità della CPU, CPU e attesa CPU, attesa I/O e attesa blocco.

    La latenza delle query parallele si misura nelle ore effettive, anche se il carico delle query può essere superiore per la query a causa dell'utilizzo di più core per l'esecuzione di parte della query.

    Prova a restringere il problema esaminando le seguenti domande:

    1. Qual è la causa del carico elevato? Seleziona le opzioni per esaminare la capacità della CPU, la CPU e l'attesa CPU, l'attesa I/O o l'attesa blocco.
    2. Da quanto tempo il carico è elevato? È alto solo ora? Oppure è alta da molto tempo? Modifica l'intervallo di tempo per trovare la data e l'ora in cui il caricamento ha iniziato a funzionare in modo insoddisfacente.
    3. Ci sono stati picchi di latenza? Modifica l'intervallo di tempo per studiare la latenza storica per la query normalizzata.

    Trace la fonte del problema

    Quando trovi le aree e i momenti in cui il carico è stato più elevato, identifica la fonte del problema utilizzando il monitoraggio per visualizzare ulteriori dettagli.

    Per aiutarti a identificare la fonte 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 contestuale. Questa visualizzazione ti aiuta a capire cosa succede nel livello del database per una richiesta specifica e a trovare l'origine di una query problematica in base a modello, visualizzazione, controller e route.

    Se attivi OpenCensus o OpenTelemetry, le informazioni relative agli span di OpenCensus vengono inviate al database insieme alle informazioni sui tag all'interno dei commenti SQL. Eventuali tracce dall'applicazione a Cloud Logging sono collegate alle tracce del piano di query del database per contribuire a identificare la fonte del problema.

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

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

    Per determinare il client e l'utente che causano il problema, utilizza le tabelle Indirizzi client principali e Utenti principali per trovare i carichi 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 del carico delle query, il tempo di esecuzione medio in millisecondi e le volte chiamate.

    L'immagine mostra che per i principali indirizzi client il carico era
         100%, il tempo di esecuzione medio era 19.568 secondi e il numero di volte
         chiamate era 1.226. Per gli utenti principali, l'utente postgres ha avuto il 100% del carico,
         un tempo di esecuzione medio di 19.568 ms ed è stato chiamato 1.226
         volte.

    Puoi utilizzare Cloud Trace per visualizzare il monitoraggio end-to-end per ogni passaggio del piano di query. Nella dashboard Approfondimenti sulle query, fai clic sul link Visualizza nel tracciato per aprire lo strumento Cloud Trace. Il grafico delle tracce mostra tutte le tracce che sono state 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 contiene anche una tabella che mostra la latenza, il metodo HTTP, l'URL e l'ora in cui è stata eseguita la traccia.

    Per maggiori dettagli, vedi Trovare e visualizzare le tracce.

    Aggiungere tag alle query SQL

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

    Utilizzare sqlcommenter con ORM

    Quando utilizzi ORM instead of directly writing SQL queries, potresti non trovare il codice dell'applicazione che causa problemi di prestazioni. Potresti anche riscontrare difficoltà ad analizzare in che modo il codice dell'applicazione influisce sulle prestazioni delle query. Per risolvere il problema, Query Insights fornisce una libreria open source chiamata sqlcommenter. Questa biblioteca è utile per gli sviluppatori e gli amministratori che utilizzano gli 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 instrumentazione consente di propagare al database le informazioni dell'applicazione relative al framework MVC insieme alle query come 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 in modo che tu sappia quale applicazione sta causando il carico delle query e possa trovare il codice dell'applicazione che sta causando problemi di prestazioni.

    Quando esamini i risultati nei log del database SQL, 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, il percorso, il framework e l'azione.

    L'insieme di strumenti ORM in sqlcommenter è supportato per i seguenti linguaggi di programmazione:

    Python
    • Django
    • psycopg2
    • Sqlalchemy
    • Flask
    Java
    • Hibernate
    • Primavera
    Ruby
    • Rails
    Node.js
    • Knex.js
    • Sequelize.js
    • Express.js

    Per ulteriori informazioni su sqlcommenter e su come utilizzarlo nel tuo 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 dei commenti SQL corretto alla query SQL. Devi anche integrare 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 elimina tutte le altre chiavi.

    Disattivare Query Insights

    Console

    Per disattivare 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 Abilita Query Insights.
    6. Fai clic su Salva.

    gcloud

    Per disattivare 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 disattivare 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, apporta 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 Cloud SQL. Le stringhe del tipo di metrica di Query Insights iniziano con database/postgresql/insights.