Usar o Query insights para melhorar o desempenho da consulta

Esta página descreve como usar o painel do Query insights para detectar e analisar problemas de desempenho.

Introdução

O Query insights ajuda a detectar, diagnosticar e evitar problemas de desempenho relacionados aos bancos de dados do Cloud SQL. Ele auxilia o monitoramento intuitivo e fornece informações de diagnóstico que ajudam você a ir além da detecção, para identificar a causa raiz de problemas de desempenho.

Com o Query insights, é possível monitorar o desempenho no nível do aplicativo e rastrear a origem de uma consulta problemática em toda a pilha do aplicativo por modelo, visualização, controlador, rota, usuário e host. A ferramenta Query insights pode ser integrada às ferramentas de monitoramento de aplicativos (APM) atuais e aos serviços do Google Cloud usando APIs e padrões abertos. Desse modo, é possível monitorar e solucionar problemas de consulta usando a ferramenta de sua preferência.

O Query insights ajuda a melhorar o desempenho de consulta do Cloud SQL, orientando você pelas seguintes etapas:

  1. Visualizar a carga do banco de dados das consultas mais frequentes.
  2. Identificar uma consulta ou tag potencialmente problemática.
  3. Analisar a consulta ou tag para identificar problemas.
  4. Rastrear a origem do problema.

O Query insights é compatível com todos os tipos de máquinas do Cloud SQL e está disponível em todas as regiões do Google Cloud.

Preços

Não há custo adicional para gerar o Query insights. É possível acessar dados por uma semana no painel do Query insights.

O Query insights não ocupa espaço de armazenamento na instância do Cloud SQL. As métricas são armazenadas no Cloud Monitoring. Para solicitações de API, consulte os Preços do Cloud Monitoring. O Cloud Monitoring tem um nível que pode ser usado sem custo extra.

Antes de começar

Para visualizar um plano de consulta ou realizar o rastreamento completo, você precisa de permissões específicas do IAM. Crie um papel personalizado e adicione a permissão cloudtrace.traces.get do IAM a ele. Em seguida, adicione esse papel a cada conta de usuário que precisa usar o Query insights.

Para exibir os planos de consulta e as visualizações completas, seu projeto do Google Cloud precisa ter a API Trace ativada. Essa configuração permite que o projeto do Google Cloud receba dados de trace de fontes autenticadas sem custos adicionais. Esses dados podem ajudar a detectar e diagnosticar problemas de desempenho na instância.

Para confirmar se a API Trace está ativada, siga estas etapas:

  1. No console do Google Cloud, acesse APIs e serviços:

    Acessar APIs e Serviços

  2. Clique em Ativar APIs e serviços.
  3. Na barra de pesquisa, digite Trace API.
  4. Se a mensagem API ativada for exibida, isso significa que ela está ativada e não há ações adicionais. Caso contrário, clique em Ativar.

Ativar o Query Insights

As métricas do Query insights são criptografadas em repouso. Os usuários com acesso ao painel do Cloud SQL podem acessar as métricas do Query insights no painel do Query insights. Se você tiver permissão para atualizar instâncias, conseguirá configurar o Query insights. Para uma lista das permissões necessárias para instâncias do Cloud SQL, consulte Controle de acesso de projetos do Cloud SQL. Se você não tiver essas permissões e quiser ativar o Query Insights em suas instâncias, entre em contato com o administrador.

Console

Ativar o Query Insights para uma instância
  1. No console do Google Cloud, acesse a página Instâncias do Cloud SQL.

    Acesse "Instâncias do Cloud SQL"

  2. Para abrir a página Visão geral de uma instância, clique no nome dela.
  3. No bloco Configuração, clique em Editar configuração.
  4. Na seção Opções de configuração, expanda Query insights.
  5. Marque a caixa de seleção Ativar Query insights.
  6. Opcional: selecione uma ou mais das seguintes opções do Query insights:

    Armazenar endereços IP de clientes

    Padrão: false

    Armazena os endereços IP do cliente de origem das consultas e ajuda a agrupar esses dados para gerar métricas. As consultas vêm de mais de um host. A análise de gráficos para consultas de endereços IP de clientes pode ajudar a identificar a origem de um problema.

    Armazenar tags de aplicativos

    Padrão: false

    Armazena tags de aplicativos que ajudam a determinar as APIs e as rotas modelo-visualização-controlador (MVC) que fazem solicitações e agrupam os dados para executar métricas. Essa opção exige que você comente consultas com um conjunto específico de tags usando a biblioteca de instrumentação automática de mapeamento relacional de objetos de código aberto (ORM, na sigla em inglês) sqlcommenter. Essas informações ajudam o Query Insights a identificar a fonte de um problema e o MVC de origem dele. Os caminhos de aplicativo ajudam no monitoramento de aplicativos.

    Personalizar o tamanho da consulta

    Padrão: 1024

    Define o limite de tamanho da consulta como um valor especificado de 256 a 4.500 bytes. Comprimentos de consulta mais altos são mais úteis para consultas analíticas, mas também exigem mais memória. Se alterar o tamanho da consulta, você vai ter que reiniciar a instância. Ainda é possível adicionar tags às consultas que excedem o limite de tamanho.

    Definir a taxa de amostragem máxima

    Padrão: 5

    Define a taxa de amostragem máxima. A taxa de amostragem é o número de amostras do plano de consulta executadas que são capturadas por minuto em todos os bancos de dados na instância. Mude esse valor para um número entre 0 (para desativar a amostragem) e 20. Aumentar a taxa de amostragem pode proporcionar mais pontos de dados, mas pode aumentar a sobrecarga de desempenho.

  7. Clique em Save.
Ativar o Query Insights para várias instâncias
  1. No console do Google Cloud, acesse a página Instâncias do Cloud SQL.

    Acesse Instâncias do Cloud SQL

  2. Clique no menu Mais ações em qualquer linha.
  3. Selecione Ativar o Query Insights.
  4. Na caixa de diálogo, marque a caixa de seleção Ativar o Query Insights para várias instâncias.
  5. Selecione Ativar.
  6. Na caixa de diálogo subsequente, selecione as instâncias para as quais você quer ativar o Query Insights.
  7. Clique em Ativar o Query Insights.

gcloud

Para ativar o Query Insights em uma instância do Cloud SQL usando gcloud, execute gcloud sql instances patch com a flag --insights-config-query-insights-enabled da seguinte maneira, depois de substituir INSTANCE_ID pelo ID da instância.

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

Além disso, use uma ou mais das seguintes sinalizações opcionais:

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

    Armazena os endereços IP do cliente de origem das consultas e ajuda a agrupar esses dados para gerar métricas. As consultas vêm de mais de um host. A análise de gráficos para consultas de endereços IP de clientes pode ajudar a identificar a origem de um problema.

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

    Armazena tags de aplicativos que ajudam a determinar as APIs e as rotas modelo-visualização-controlador (MVC) que fazem solicitações e agrupam os dados para executar métricas. Essa opção requer que você comente consultas com um conjunto específico de tags. Para isso, use a biblioteca de instrumentação automática de mapeamento relacional de objetos de código aberto (ORM) sqlcommenter. Essas informações ajudam o Query insights a identificar a origem de um problema e a MVC deste. Os caminhos de aplicativo ajudam no monitoramento de aplicativos.

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

    Define o limite de tamanho da consulta padrão como um valor especificado de 256 a 4.500 bytes. O tamanho de consulta padrão é 1024 bytes. Comprimentos de consulta mais altos são mais úteis para consultas analíticas, mas também exigem mais memória. Se alterar o tamanho da consulta, você vai ter que reiniciar a instância. Ainda é possível adicionar tags às consultas que excedem o limite de tamanho.

  • --query_plans_per_minute

    Por padrão, no máximo cinco amostras de planos de consulta executadas são capturadas por minuto em todos os bancos de dados da instância. Mude esse valor para um número entre 0 (para desativar a amostragem) e 20. É provável que o aumento da taxa de amostragem ofereça mais pontos de dados, mas pode adicionar uma sobrecarga de desempenho.

Substitua:

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

Para ativar o Query insights para uma instância do Cloud SQL usando a API REST, chame o método instances.patch com as configurações insightsConfig.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • project-id: o ID do projeto.
  • instance-id: o ID da instância

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "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

Se quiser usar o Terraform para ativar o Query Insights para uma instância do Cloud SQL, defina a flag query_insights_enabled como true. Além disso, é possível usar uma ou mais das seguintes flags opcionais:

  • query_string_length: o padrão é 1024 e pode ser configurado com um valor entre 256 e 4500 em bytes.
  • record_application_tags: defina o valor como true se quiser registrar as tags do aplicativo na consulta.
  • record_client_address: defina o valor como true se quiser gravar o endereço IP do cliente.
  • query_plans_per_minute: o padrão é 5 e pode ser configurado com um valor entre 5 e 20.
  • Veja um exemplo:
    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
       }
     }
    }
    

    Para aplicar a configuração do Terraform em um projeto do Google Cloud, conclua as etapas nas seções a seguir.

    Preparar o Cloud Shell

    1. Inicie o Cloud Shell.
    2. Defina o projeto padrão do Google Cloud em que você quer aplicar as configurações do Terraform.

      Você só precisa executar esse comando uma vez por projeto, e ele pode ser executado em qualquer diretório.

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

      As variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.

    Preparar o diretório

    Cada arquivo de configuração do Terraform precisa ter o próprio diretório, também chamado de módulo raiz.

    1. No Cloud Shell, crie um diretório e um novo arquivo dentro dele. O nome do arquivo precisa ter a extensão .tf, por exemplo, main.tf. Neste tutorial, o arquivo é chamado de main.tf.
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. Se você estiver seguindo um tutorial, poderá copiar o exemplo de código em cada seção ou etapa.

      Copie o exemplo de código no main.tf recém-criado.

      Se preferir, copie o código do GitHub. Isso é recomendado quando o snippet do Terraform faz parte de uma solução de ponta a ponta.

    3. Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
    4. Salve as alterações.
    5. Inicialize o Terraform. Você só precisa fazer isso uma vez por diretório.
      terraform init

      Opcionalmente, para usar a versão mais recente do provedor do Google, inclua a opção -upgrade:

      terraform init -upgrade

    Aplique as alterações

    1. Revise a configuração e verifique se os recursos que o Terraform vai criar ou atualizar correspondem às suas expectativas:
      terraform plan

      Faça as correções necessárias na configuração.

    2. Para aplicar a configuração do Terraform, execute o comando a seguir e digite yes no prompt:
      terraform apply

      Aguarde até que o Terraform exiba a mensagem "Apply complete!".

    3. Abra seu projeto do Google Cloud para ver os resultados. No console do Google Cloud, navegue até seus recursos na IU para verificar se foram criados ou atualizados pelo Terraform.

    As métricas devem ser disponibilizadas no Query insights alguns minutos após a conclusão da consulta. Revise a Política de retenção de dados do Cloud Monitoring. Os traces do Query insights são armazenados no Cloud Trace. Revise a Política de retenção de dados do Cloud Trace.

    Visualizar o painel do Query insights

    O painel do Query insights mostra a carga de consulta com base nos fatores selecionados. A carga de consulta é a medida do trabalho total de todas as consultas na instância no intervalo de tempo selecionado. O painel fornece uma série de filtros que ajudam você a visualizar a carga de consulta.

    Para abrir o painel do Query insights, siga estas etapas:

    1. Para abrir a página Visão geral de uma instância, clique no nome dela.
    2. Selecione a guia Query insights no painel de navegação à esquerda ou clique no link Acessar Query insights para ver informações mais detalhadas sobre consultas e desempenho.

    O painel do Query insights é aberto. Ele mostra as seguintes informações sobre a instância:

    Mostra o painel do Query insights, com menus suspensos
para bancos de dados, usuários e endereços. À direita dos menus suspensos, há um filtro para definir um intervalo de tempo. Além disso,
         um gráfico mostra a carga do banco de dados das consultas mais frequentes. Na parte inferior
do gráfico, há caixas de seleção para a capacidade da CPU, CPU e espera
da CPU, espera de E/S e espera de bloqueio, além de uma guia para consultas e tags.
    • Bancos de dados: filtra a carga de consulta em um banco de dados específico ou em todos os bancos de dados.
    • Usuário: filtra o carregamento da consulta de uma conta de usuário específica.
    • Endereço do cliente: filtra a carga da consulta de um endereço IP específico.
    • Intervalo de tempo: filtra a carga da consulta por períodos, como hora, dia, semana, mês ou um intervalo personalizado.
    • Gráfico da carga do banco de dados: exibe o gráfico da carga de consulta com base nos dados filtrados.
    • Capacidade da CPU, CPU e espera da CPU, espera de E/S e espera de bloqueio: filtra cargas com base nas opções selecionadas. Veja detalhes sobre cada um desses filtros em Visualizar a carga do banco de dados das consultas mais frequentes.
    • Consultas e tags: Filtra a carga de consulta por uma consulta selecionada ou por uma tag de consulta SQL selecionada. Consulte Filtrar a carga do banco de dados.

    Visualizar a carga do banco de dados de todas as consultas

    A carga de consulta do banco de dados é uma medida do trabalho (em segundos de CPU) realizado pelas consultas executadas no banco de dados selecionado ao longo do tempo. Cada consulta em execução está usando ou aguardando recursos de CPU, recursos de E/S ou recursos de bloqueio. A carga de consulta do banco de dados é a proporção entre o tempo gasto por todas as consultas concluídas em uma determinada janela de tempo e o tempo real decorrido.

    O painel do Query insights de nível superior mostra o gráfico Carga do banco de dados — todas as consultas mais frequentes. Os menus suspensos no painel permitem que o gráfico seja filtrado quanto ao banco de dados, usuário ou endereço de um cliente específico.

    Mostra o gráfico de carga do banco de dados com uma carga para a capacidade da CPU, a CPU e a espera da CPU, a E/S de espera e a espera de bloqueio.

    As linhas coloridas no gráfico mostram a carga da consulta, dividida em quatro categorias:

    • Capacidade da CPU: o número de CPUs disponíveis na instância.
    • CPU e espera de CPU: a proporção entre o tempo gasto pelas consultas em um estado ativo e o tempo real decorrido. As esperas de E/S e de bloqueio não bloqueiam consultas que estão em um estado ativo. Essa métrica pode significar que a consulta está usando a CPU ou aguardando o programador do Linux programar o processo do servidor que executa a consulta enquanto outros processos a usam.

    • Espera de E/S: a proporção entre o tempo gasto pelas consultas que estão aguardando E/S e o tempo real decorrido. Inclui a espera de E/S de leitura e de gravação.

      Consulte a tabela de eventos do PostgreSQL.

      Se você quiser um detalhamento de informações para espera de IO, poderá vê-las no Cloud Monitoring. Consulte Métricas do Cloud SQL para mais informações.

    • Espera de bloqueio: a proporção entre o tempo gasto pelas consultas que estão aguardando bloqueios e o tempo real decorrido. Inclui esperas de Lock, de LwLock e de BufferPin Lock. Para ver um detalhamento das informações sobre as esperas de bloqueio, use o Cloud Monitoring. Consulte Métricas do Cloud SQL para mais informações.

    Analise o gráfico e use as opções de filtragem para analisar estas perguntas:

    1. A consulta está alta? O gráfico está piscando ou aumentando ao longo do tempo? Se você não vê uma carga alta, o problema não está nas consultas.
    2. Quanto tempo a carga tem sido alta? Ela é alta apenas agora ou tem sido alta por muito tempo? Use o seletor de intervalo para selecionar vários períodos para descobrir quanto tempo durou o problema. Aumente o zoom para ver uma janela de tempo em que os picos de carga de consulta são observados. Diminua o zoom para ver até uma semana na linha do tempo.
    3. O que está causando a carga alta? É possível selecionar opções para examinar a capacidade da CPU, a espera da CPU e da CPU, a espera de bloqueio ou a espera de E/S. O gráfico para cada uma dessas opções é uma cor diferente para que você possa identificar facilmente aquela com a carga mais alta. A linha azul-escuro no gráfico mostra a capacidade máxima da CPU do sistema. Com ela, é possível comparar a carga de consulta com a capacidade máxima do sistema de CPU. Essa comparação ajuda você a saber se uma instância está ficando sem recursos de CPU.
    4. Qual banco de dados está passando pela carga? Selecione diferentes bancos de dados no menu suspenso "Bancos de dados" para encontrar os bancos de dados com as cargas mais altas.
    5. Usuários ou endereços IP específicos causam cargas mais altas? Selecione usuários e endereços diferentes nos menus suspensos para identificar aqueles que estão causando cargas mais altas.

    Filtrar a carga do banco de dados

    É possível filtrar a carga do banco de dados por consultas ou tags.

    Filtrar por consultas

    A tabela Consultas fornece uma visão geral das consultas que geram a maior parte da carga. A tabela mostra todas as consultas normalizadas para a janela de tempo e opções selecionadas no painel do Query insights. Ela classifica as consultas pelo tempo total de execução durante o período selecionado.

    Mostra o gráfico de carga do banco de dados com uma carga para consultas, com filtros selecionados para capacidade de CPU, espera de CPU e CPU, espera de E/S e espera de bloqueio.

    Para classificar a tabela, selecione o título de uma coluna ou uma propriedade em Filtrar consultas. A tabela mostra as seguintes propriedades:

    • Consulta: a string de consulta normalizada. O Query insights mostra apenas 1.024 caracteres na string de consulta por padrão.

      As consultas rotuladas como UTILITY COMMAND geralmente incluem comandos BEGIN, COMMIT e EXPLAIN ou comandos de wrapper.

    • Banco de dados: o banco de dados em que a consulta foi executada.

    • Carga por tempo total/Carga por CPU/Carga por espera de E/S/Carga por espera: as opções em que você pode filtrar consultas específicas para encontrar a maior carga.

    • Tempo médio de execução (ms): o tempo médio de execução da consulta.

    • Horários chamados: o número de vezes que o aplicativo chamou a consulta.

    • Média de linhas retornadas: a média de linhas retornadas para a consulta.

    O Query insights armazena e exibe apenas consultas normalizadas. Por padrão, o Query insights não coleta endereços IP ou informações de tag. É possível permitir que o Query insights colete essas informações e, quando necessário, desativar essa coleta. Os traces do plano de consulta não coletam nem armazenam valores constantes e removem informações de PII que a constante talvez mostre.

    Para o PostgreSQL 9.6 e 10, o Query insights exibe consultas normalizadas, ou seja, ? substitui o valor literal da constante. No exemplo a seguir, a constante de nome é removida e ? a substitui.

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

    Para o PostgreSQL 11 ou mais recente, $1, $2, e assim por diante, substituem valores constantes literais.

    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
    

    Filtrar por tags de consulta

    Para solucionar problemas em um aplicativo, você precisa adicionar tags às suas consultas SQL primeiro. As tags de carga de consulta fornecem um detalhamento da carga de consulta da tag selecionada ao longo do tempo.

    O Query insights fornece monitoramento centrado no aplicativo para diagnosticar problemas de desempenho de aplicativos criados com o uso de ORMs. Se você for responsável por toda a pilha do aplicativo, o Query insights fornecerá monitoramento de consulta a partir de uma visualização do aplicativo. A inclusão da tag de consulta ajuda a encontrar problemas em construções de nível superior, como na lógica de negócios ou em um microsserviço.

    Marque as consultas pela lógica de negócios, por exemplo, usando as tags de pagamento, inventário, análise de negócios ou frete. Em seguida, é possível encontrar a carga de consulta criada por várias lógicas de negócios. Por exemplo, você talvez observe eventos inesperados, como picos para uma tag de análise de dados de negócios às 13h ou um crescimento anormal de um serviço de pagamento em alta durante uma semana.

    Para calcular a Carga do banco de dados para a tag, o Query insights usa o tempo gasto por cada consulta que usa a tag selecionada. A ferramenta calcula o tempo de conclusão no limite dos minutos usando o tempo decorrido.

    No painel do Query insights, para ver a tabela de tags, selecione Tags. A tabela de tags as classifica pelo carregamento total por tempo total.

    Mostra o painel do Query insights, com carga para tags e uma lista de tags.

    É possível classificar a tabela selecionando uma propriedade, em Filtrar tags, ou clicando em um cabeçalho de coluna. A tabela mostra as seguintes propriedades:

    • Ação, controlador, framework, rota, aplicativo, driver DB: cada propriedade adicionada às consultas é mostrada como uma coluna. É preciso adicionar pelo menos uma dessas propriedades para filtrar por tags.
    • Carga por tempo total/Carga por CPU/Carga por espera de E/S/Carga por bloqueio: opções para filtrar consultas específicas para encontrar a maior carga para cada opção.
    • Tempo médio de execução (ms): o tempo médio de execução da consulta.
    • Média de linhas retornadas: a média de linhas retornadas para a consulta.
    • Horários chamados: o número de vezes que o aplicativo chamou a consulta.
    • Banco de dados: o banco de dados em que a consulta foi executada.

    Examinar uma consulta ou tag específica

    Para saber se uma consulta ou tag é a causa raiz do problema, faça o seguinte nas guias Consultas ou Tags, respectivamente:

    1. Para classificar a lista em ordem decrescente, clique no cabeçalho Carregar por tempo total.
    2. Clique na consulta ou tag na parte superior da lista. Ele tem a carga mais alta e está levando mais tempo do que os outros.

    Um painel é aberto mostrando os detalhes da consulta ou tag selecionada.

    Examinar uma carga de consulta específica

    O painel de uma consulta selecionada é exibido da seguinte forma:

    Mostra os gráficos de latência e carga do banco de dados de uma
         consulta específica.

    O gráfico Carga do banco de dados — consulta específica mostra uma medida do trabalho (em segundos da CPU) que a consulta normalizada executou na consulta selecionada ao longo do tempo. Para calcular a carga, é usado o tempo gasto pelas consultas normalizadas que são concluídas no limite de minutos para o tempo real decorrido. Na parte superior da tabela, são exibidos os primeiros 1.024 caracteres da consulta normalizada, com literais removidos para fins de agregação e PII.

    Mostra o gráfico de carga do banco de dados com uma carga específica para consultas,
         com filtros selecionados para capacidade de CPU, espera de CPU e CPU, espera de pedido de veiculação e espera
         de bloqueio.

    Como no gráfico de consultas totais, é possível filtrar a carga de uma consulta específica por Banco de dados, Usuário e Endereço do cliente. O carregamento da consulta é dividido em Capacidade da CPU, CPU e espera de CPU, Espera de pedido de veiculação e Espera de bloqueio..

    Analisar uma carga de consulta com tag específica

    O painel de uma tag selecionada é exibido assim: Por exemplo, se todas as consultas de um pagamento de microsserviços forem marcadas como payment, será possível ver o volume de carga de consulta em alta visualizando a tag payment.

    Mostra os gráficos de carga e latência do banco de dados na página para uma
         tag específica.

    O gráfico Carga do banco de dados - tags específicas mostra uma medida do trabalho (em segundos de CPU) que as consultas com as tags selecionadas realizaram no banco de dados selecionado ao longo do tempo. Como no gráfico de consultas totais, é possível filtrar a carga de uma tag específica por Banco de dados, Usuário e Endereço do cliente.

    Examinar operações em um plano de consulta de amostra

    Um plano de consulta usa uma amostra da sua consulta e a divide em operações individuais. Ela explica e analisa cada operação na consulta.

    O gráfico Amostras do plano de consulta mostra todos os planos de consulta sendo executados em momentos específicos e o tempo de execução de cada plano. É possível alterar a taxa em que as amostras do plano de consulta são capturadas por minuto. Veja Ativar Query insights.

    Um gráfico para amostras de planos de consulta,
com o tempo em que foram executados na parte inferior do gráfico (eixo x) e o número de segundos
em que foram executados à direita (eixo y).

    Por padrão, o painel à direita mostra os detalhes do plano de consulta de amostra que leva mais tempo, conforme exibido no gráfico Amostras do Query insights. Para ver os detalhes de outro plano de consulta de amostra, clique no círculo relevante no gráfico. Os detalhes expandidos mostram um modelo de todas as operações no plano de consulta. Cada operação mostra a latência, as linhas retornadas e o custo da operação. Quando você seleciona uma operação, pode ver mais detalhes, como blocos de hits compartilhados, o tipo de esquema, loops e linhas de planejamento.

    O plano de consulta mostra a latência e o custo de cada operação executada para a consulta. Ela começa com um agregado, que retorna 48 linhas, com uma latência de 31,06 ms e um custo. de 296,34. A próxima operação é um loop aninhado, que se divide em outro loop aninhado e um materialização.
         O loop aninhado é dividido em outro loop aninhado e uma verificação de índice. A materialização leva a uma verificação da sequência.

    Para restringir o problema, observe o seguinte:

    1. Qual é o consumo de recursos?
    2. Como ele se relaciona com outras consultas?
    3. O consumo muda com o tempo?

    Examinar a latência

    A latência é o período que uma consulta normalizada leva para ser concluída no tempo real. Use o gráfico Latência para examinar a latência na consulta ou tag. O painel de latência mostra as latências de 50º, 95º e 99º percentis para encontrar comportamentos atípicos.

    A imagem a seguir mostra o gráfico de carga do banco de dados no 50º percentil de uma consulta específica com filtros selecionados para capacidade de CPU, espera de CPU e CPU, espera de pedido de veiculação e espera de bloqueio.

    Mostra o gráfico de latência de uma consulta específica
         com filtros selecionados para a capacidade de CPU, a CPU e a espera da CPU, o pedido de veiculação de espera
         e a espera de bloqueio.

    A latência de consultas paralelas é medida em tempo real decorrido, mesmo que a carga do Database seja maior para a consulta devido à utilização de vários núcleos para executar parte dela.

    Para restringir o problema, observe o seguinte:

    1. O que está causando a carga alta? Selecione as opções para observar a capacidade da CPU, a CPU e a espera da CPU, a espera de E/S ou a espera de bloqueio.
    2. Quanto tempo a carga tem sido alta? Está alta no momento? Ou faz muito tempo? Altere os intervalos de tempo para encontrar a data e a hora em que a carga começou a apresentar baixo desempenho.
    3. Houve picos de latência? Altere o período para estudar a latência histórica da consulta normalizada.

    Rastrear a origem do problema

    Quando você encontrar as áreas e os horários em que a carga foi mais alta, identifique a origem do problema usando o rastreamento para detalhar ainda mais.

    Para ajudar a identificar a origem específica do problema, como modelo, visualização, controlador, rota, host ou usuário específicos, o Query insights fornece uma visualização completa do trace no contexto para entender o que está acontecendo na camada do banco de dados de uma solicitação específica e encontrar a origem de uma consulta problemática por modelo, visualização, controladores e rota.

    Se você ativar o OpenCensus ou o OpenTelemetry, as informações do período do opencensus serão enviadas ao banco de dados com as informações da tag dentro dos comentários do SQL. Todos os traces do aplicativo com o Cloud Logging são vinculados aos traces do plano de consulta do banco de dados para ajudar a identificar a origem do problema.

    Clique na guia Completo, na tela Consulta de amostra, para analisar o trace no contexto.

    Selecione a tag da qual quer visualizar informações específicas completas. O Resumo mostra as RPCs e a duração total em ms para cada operação da tag.

    Para determinar qual cliente e usuário estão causando o problema, use os principais endereços de cliente e as principais tabelas de usuários para encontrar as cargas mais altas. É possível adicionar um usuário ou endereço IP ao filtro para analisar ainda mais um usuário ou endereço de cliente específico. Os detalhes nas tabelas incluem a porcentagem da carga de consulta, o tempo médio de execução em milissegundos e os tempos chamados.

    A imagem mostra que, para os endereços dos principais clientes, a carga foi 100%, o tempo de execução médio foi de 19.568 segundos e o tempo foi chamado de 1.226. Para os principais usuários, o usuário postgres tinha 100% da carga, tinha um tempo de execução médio de 19.568 ms e foi chamado 1.226 vezes.

    Use o Cloud Trace para ver o rastreamento completo de cada etapa do plano. No painel Query insights, clique no link Visualizar no trace para abrir a ferramenta Cloud Trace. O gráfico do trace mostra todos os traces executados no período selecionado.

    O gráfico de traces mostra todos os traces que foram executados
         para o período selecionado, neste caso, uma hora. A página também tem uma tabela que mostra a latência, o método HTTP, o URL e o momento em que o trace foi executado.cd

    Para detalhes, consulte Como encontrar e visualizar traces.

    Adicionar tags às consultas SQL

    A marcação de consultas SQL simplifica a solução de problemas de aplicativos. Você pode usar sqlcommenter para adicionar tags às suas consultas SQL de maneira automática ou manual.

    Usar o sqlcommenter com o ORM

    Ao usar ORM em vez de escrever consultas SQL diretamente, talvez você não encontre o código do aplicativo que esteja causando desafios de desempenho. Talvez você também tenha problemas para analisar como o código do aplicativo afeta o desempenho da consulta. Para resolver esse problema, o Query insights fornece uma biblioteca de código aberto chamada sqlcommenter. Essa biblioteca é útil para desenvolvedores e administradores que usam ferramentas ORM para detectar qual código do aplicativo está causando problemas de desempenho.

    Se você estiver usando ORM e sqlcommenter juntos, as tags serão criadas automaticamente. Não é preciso adicionar nem alterar o código no app.

    Você pode instalar o sqlcommenter no servidor de aplicativos. A biblioteca de instrumentação permite que as informações do aplicativo relacionadas ao framework do MVC sejam propagadas para o banco de dados e com as consultas como um comentário SQL. O banco de dados coleta essas tags e começa a registrar e agregar estatísticas por elas, que são ortogonais com as estatísticas agregadas por consultas normalizadas. O Query insights mostra as tags para que você saiba qual aplicativo está causando a carga da consulta e encontre o código do aplicativo que está causando problemas de desempenho.

    Quando você examinar os resultados nos registros do banco de dados SQL, eles aparecerão assim:

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

    As tags compatíveis incluem nome, rota, framework e ação do controlador.

    O conjunto de ferramentas do ORM no sqlCommenter é compatível com as seguintes linguagens de programação:

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

    Para mais informações sobre o sqlCommenter e como usá-lo no seu framework de ORM, consulte a documentação do sqlcommenter.

    Usar sqlcommenter para adicionar tags

    Se você não estiver usando o ORM, adicione manualmente as tags ou os comentários sqlcommenter no formato de comentário SQL correto à sua consulta SQL. Também é necessário ampliar cada instrução SQL com um comentário contendo um par de chave-valor serializado. Use pelo menos uma das seguintes chaves:

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

    O Query insights remove todas as outras chaves.

    Desativar Query insights

    Console

    Para desativar o Query insights em uma instância do Cloud SQL usando o Console do Google Cloud, siga estas etapas:

    1. No console do Google Cloud, acesse a página Instâncias do Cloud SQL.

      Acesse "Instâncias do Cloud SQL"

    2. Para abrir a página Visão geral de uma instância, clique no nome dela.
    3. No bloco Configuração, clique em Editar configuração.
    4. Na seção Opções de configuração, expanda Query insights.
    5. Desmarque a caixa de seleção Ativar Query insights.
    6. Clique em Save.

    gcloud

    Para desativar o Query insights em uma instância do Cloud SQL usando gcloud, execute gcloud sql instances patch com a sinalização --no-insights-config-query-insights-enabled da seguinte maneira, depois de substituir INSTANCE_ID pelo ID da instância.

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

    REST

    Para desativar o Query insights de uma instância do Cloud SQL usando a API REST, chame o método instances.patch com queryInsightsEnabled definido como false.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • project-id: o ID do projeto.
    • instance-id: o ID da instância

    Método HTTP e URL:

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

    Corpo JSON da solicitação:

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

    Para enviar a solicitação, expanda uma destas opções:

    Você receberá uma resposta JSON semelhante a esta:

    {
      "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"
    }
    

    A seguir

    • Consulte Métricas do Cloud SQL. As strings de tipo de métrica do Query Insights começam com database/postgresql/insights.