Analisar o desempenho da consulta

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

Visão geral do Query Insights

O Query Insights ajuda você a detectar e diagnosticar problemas de desempenho em consultas e instrução DML em um banco de dados do Spanner. Ele é compatível com monitoramento intuitivo e fornece informações de diagnóstico que ajudam você a ir além da detecção para identificar a causa raiz dos problemas de desempenho.

Os insights de consulta ajudam a melhorar o desempenho da consulta do Spanner orientando você nas seguintes etapas:

  1. Confirme se as consultas ineficientes são responsáveis pelo alto uso da CPU.
  2. Identificar uma consulta ou tag potencialmente problemática.
  3. Analisar a tag de consulta ou de solicitação para identificar problemas.

O Query Insights está disponível nas configurações de região única e multirregional.

Preços

Não há custo extra para o Query Insights.

Retenção de dados

A retenção máxima de dados do Query Insights é de 30 dias. Para o gráfico Utilização total da CPU (por tag de consulta ou solicitação), os dados são retirados das tabelas SPANNER_SYS.QUERY_STATS_TOP_*, que têm uma retenção máxima de 30 dias. Consulte Retenção de dados para saber mais.

Funções exigidas

Você precisará de diferentes papéis e permissões do IAM, dependendo se é um usuário do IAM ou um usuário de controle de acesso refinado.

Usuário do Identity and Access Management (IAM)

Para receber as permissões necessárias para visualizar a página "Insights de consulta", peça ao administrador para conceder a você os papéis do IAM a seguir na instância:

As seguintes permissões do papel Leitor de banco de dados do Cloud Spanner (roles/spanner.databaseReader) são necessárias para acessar a página "Insights de consulta":

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

Usuário de controle de acesso granular

Se você é um usuário de controle de acesso refinado, certifique-se de:

  • Tenha o Leitor do Cloud Spanner(roles/spanner.viewer)
  • Têm privilégios de controle de acesso refinados e recebem o papel do sistema spanner_sys_reader ou um dos papéis de membro dele.
  • Selecione o spanner_sys_reader ou um papel de membro como o papel atual do sistema na página de visão geral do banco de dados.

Para mais informações, consulte Sobre o controle de acesso detalhado e Papéis do sistema de controle de acesso refinado.

Painel de insights de consulta

O painel de insights de consulta mostra a carga da consulta com base no banco de dados e no intervalo de tempo selecionados. A carga da consulta é uma medida da utilização total da CPU para todas as consultas na instância no período selecionado. O painel tem uma série de filtros que ajudam a conferir a carga da consulta.

Para visualizar o painel do Query Insights para um banco de dados, faça o seguinte:

  1. Selecione Insights de consulta no painel de navegação à esquerda. O painel do Query Insights é aberto.
  2. Selecione um banco de dados na lista Bancos de dados. O painel mostra as informações de carga de consulta para o banco de dados.

As áreas do painel incluem:

  1. Lista de bancos de dados: filtra a carga da consulta em um banco de dados específico ou em todos os bancos de dados.
  2. Filtro de intervalo de tempo: filtra a carga da consulta por intervalos de tempo, como horas, dias ou um intervalo personalizado.
  3. Gráfico de Utilização total da CPU (todas as consultas): exibe a carga agregada de todas as consultas.
  4. Gráfico de utilização total da CPU (por tag de consulta ou solicitação): exibe a utilização da CPU por cada tag de consulta ou solicitação.
  5. Tabela de tags e consultas TopN: exibe a lista das principais consultas e tags de solicitação classificadas por uso da CPU. Saiba mais em Identificar uma consulta ou tag potencialmente problemática.

Painel de insights de consulta

Desempenho do painel

Use parâmetros de consulta ou inclua tags nas suas consultas para otimizar o desempenho dos insights de consulta. Se você não adicionar tags ou parâmetros às suas consultas, é possível que muitos resultados sejam retornados, o que pode fazer com que a tabela de consultas e tags do TopN não carregue corretamente.

Confirme se as consultas ineficientes são responsáveis pela alta utilização da CPU

A utilização total da CPU é uma medida do trabalho (em segundos da CPU) que as consultas executadas no banco de dados selecionado realizam ao longo do tempo.

Uso total da CPU para todas as consultas

Analise o gráfico para analisar estas questões:

  • Qual banco de dados está passando pela carga? Selecione bancos de dados diferentes na lista para encontrar aqueles com as cargas mais altas. Para descobrir qual banco de dados tem a carga mais alta, também é possível analisar o gráfico Utilização da CPU: total para bancos de dados no Console do Google Cloud.

    Carga do banco de dados

  • O uso da CPU é alto? O gráfico está piscando ou aumentando ao longo do tempo? Se não ocorrer alta utilização da CPU, o problema não está nas consultas.

  • Há quanto tempo o uso da CPU tem sido alto? Houve um pico recentemente ou tem por estado consistentemente alto há algum tempo? Use o seletor de intervalo para selecionar vários períodos para descobrir quanto tempo durou o problema. Aumente o zoom para visualizar uma janela de tempo em que os picos de carga da consulta são observados. Diminua o zoom para ver até uma semana na linha do tempo.

Caso haja um pico ou uma elevação no gráfico correspondente ao uso geral da CPU da instância, isso provavelmente se deve a uma ou mais consultas caras. Em seguida, você pode se aprofundar na jornada de depuração, identificando uma consulta ou tag de solicitação potencialmente problemática.

Identifique uma consulta ou tag de solicitação potencialmente problemática

Para identificar uma tag de consulta ou solicitação potencialmente problemática, observe a seção de consultas TopN:

Consultas TopN

Aqui vemos que a consulta com FPRINT 6815864236081503267 tem um alto uso da CPU e pode ser problemática.

A tabela Consultas TopN fornece uma visão geral das consultas que usam a maior parte da CPU durante a janela de tempo escolhida, classificadas em ordem decrescente. O número de consultas TopN está limitado a 100.

Para os gráficos, buscamos os dados da tabela de estatísticas de consulta do TopN, que tem três granularidades diferentes: 1 minuto, 10 minutos e 1 hora. O valor de cada ponto de dados nos gráficos representa o valor médio em um intervalo de um minuto.

Uma prática recomendada é adicionar tags às consultas SQL. A inclusão de tags 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.

Tabela de consultas TopN

A tabela mostra as seguintes propriedades:

  • FPRINT: hash da tag de solicitação, se presente. Caso contrário, o hash da consulta.
  • Tag de consulta ou solicitação: se a consulta tiver uma tag associada, a tag de solicitação será exibida. As estatísticas de várias consultas que têm a mesma string de tag são agrupadas em uma única linha com o valor REQUEST_TAG correspondente à string da tag. Para saber mais sobre o uso de tags de solicitação, consulte Solução de problemas com tags de solicitação e de transação.

    Se a consulta não tiver uma tag associada, a consulta SQL será exibida truncada para aproximadamente 64 KB. Para DML em lote, as instruções SQL são simplificadas em uma única linha e concatenadas com um delimitador de ponto e vírgula. Os textos SQL idênticos consecutivos são eliminados antes do truncamento.

  • Tipo de consulta: indica se uma consulta é PARTITIONED_QUERY ou QUERY. Um PARTITIONED_QUERY é uma consulta com um partitionToken recebido da API PartitionQuery. Todas as outras consultas e instruções DML são indicadas pelo tipo de consulta QUERY.

  • Utilização da CPU: consumo de recursos da CPU por consulta, no formato de porcentagem do total de recursos da CPU usados por todas as consultas em execução nos bancos de dados nesse intervalo de tempo, mostrado em uma barra horizontal no intervalo de 0 a 100.

  • CPU (%): consumo de recursos da CPU por uma consulta, como uma porcentagem dos recursos totais da CPU usados por todas as consultas em execução nos bancos de dados nesse intervalo de tempo.

  • Contagem de execução: número de vezes que o Spanner viu a consulta durante o intervalo.

  • Latência média (ms): tempo médio, em microssegundos, para cada execução de consulta no banco de dados. Essa média exclui o tempo de codificação e transmissão do conjunto de resultados, bem como a sobrecarga.

  • Média de linhas verificadas: o número médio de linhas que a consulta verificou, excluindo os valores excluídos.

  • Média de linhas retornadas: o número médio de linhas retornadas pela consulta.

  • Bytes retornados: número de bytes de dados que a consulta retornou, excluindo a sobrecarga de codificação de transmissão.

Possível variação entre os gráficos

Talvez você note alguma variação entre os gráficos Utilização total da CPU (todas as consultas) e Uso total da CPU (por tag de consulta ou solicitação). Há duas coisas que podem levar a esse cenário:

  • Diferentes fontes de dados: os dados do Cloud Monitoring, que alimentam o gráfico de utilização total da CPU (todas as consultas), geralmente são mais precisos porque são enviados a cada minuto e têm um período de armazenamento de 45 dias. Por outro lado, os dados da tabela do sistema, que alimentam o gráfico de utilização total da CPU (por tag de solicitação ou consulta) podem ter uma média de 10 minutos (ou 1 hora). Nesse caso, podemos perder dados de alta granularidade que vemos no gráfico de utilização total da CPU (todas as consultas).

  • Janelas de agregação diferentes: os dois gráficos têm janelas de agregação diferentes. Por exemplo, ao inspecionar um evento com mais de seis horas, consultamos a tabela SPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE. Nesse caso, um evento que ocorre às 10h01 seria agregado ao longo de 10 minutos e estaria presente na tabela do sistema correspondente ao carimbo de data/hora das 10h10.

A captura de tela a seguir mostra um exemplo dessa variação.

Variação entre gráficos

Analisar uma consulta ou tag de solicitação específica

Para determinar se uma tag de consulta ou de solicitação é a causa raiz do problema, clique na tag de consulta ou de solicitação que parece ter a carga mais alta ou está demorando mais que as outras. É possível selecionar várias consultas e solicitar tags de uma vez.

Mantenha o ponteiro do mouse no gráfico para consultas na linha do tempo para saber a utilização da CPU (em segundos).

Para restringir o problema, observe o seguinte:

  • Quanto tempo a carga tem sido alta? Está alta no momento? Ou faz muito tempo? Altere os períodos para encontrar a data e a hora em que a consulta começou a ter um desempenho insatisfatório.
  • Houve picos no uso da CPU? É possível alterar a janela de tempo para estudar o uso histórico da CPU na consulta.
  • Qual é o consumo de recursos? Como ele se relaciona com outras consultas? Olhe a tabela e compare os dados de outras consultas com a selecionada. Há uma grande diferença?

Para confirmar que a consulta selecionada está contribuindo para a alta utilização da CPU, é possível detalhar o formato da consulta específica (ou tag de solicitação) e analisá-lo mais a fundo na página "Detalhes da consulta".

Exibir a página "Detalhes da consulta"

Para visualizar os detalhes de um formato de consulta específico ou de uma tag de solicitação em um formato gráfico, clique no FPRINT associado à tag de consulta ou de solicitação. A página "Detalhes da consulta" é aberta.

Página "Detalhes da consulta"

A página "Detalhes da consulta" mostra as seguintes informações:

  1. Texto de detalhes da consulta: texto da consulta SQL, truncado para aproximadamente 64 KB. As estatísticas de várias consultas que têm a mesma string de tag são agrupadas em uma única linha com REQUEST_TAG correspondente a essa string de tag. Somente o texto de uma dessas consultas é mostrado nesse campo. Para a DML em lote, o conjunto de instruções SQL é nivelado em uma única linha, concatenado usando um delimitador de ponto e vírgula. A duplicação de textos SQL idênticos consecutivos é eliminada antes de ser truncada.
  2. Os valores dos seguintes campos:
    • Contagem de execução: número de vezes que o Spanner viu a consulta durante o intervalo.
    • Média de CPU (ms): consumo médio de recursos da CPU, em milissegundos, por uma consulta dos recursos da CPU da instância em um intervalo de tempo.
    • Latência média (ms): tempo médio, em milissegundos, para cada execução de consulta no banco de dados. Essa média exclui o tempo de codificação e transmissão do conjunto de resultados e sobrecarga.
    • Média de linhas retornadas: número médio de linhas retornadas pela consulta.
    • Média de linhas verificadas: o número médio de linhas que a consulta verificou, excluindo os valores excluídos.
    • Média de bytes: número de bytes de dados que a consulta retornou, excluindo a sobrecarga de codificação de transmissão.
  3. Gráfico de amostras de planos de consulta: cada ponto no gráfico representa um plano de consulta de amostra em um horário específico e a latência de consulta específica. Clique em um dos pontos no gráfico para ver o plano de consulta e as etapas realizadas durante a execução da consulta. Observação: os planos de consulta não são compatíveis com consultas com partitionTokens recebidos da API PartitionQuery e consultas DML particionada.
  4. Visualizador do plano de consulta: mostra o plano de consulta de amostra selecionado. Cada nó, ou cartão, no gráfico representa um iterador que consome linhas das entradas e produz linhas para o pai. Você pode clicar em cada iterador para ver mais informações.
  5. Gráfico de latência da consulta: mostra o valor da latência de uma consulta selecionada ao longo de um período. além da latência média.
  6. Gráfico de utilização da CPU: mostra a utilização da CPU por consulta, em porcentagem, ao longo de um período. Também mostra a utilização média da CPU.
  7. Contagem de execuções/gráfico com falha: mostra a contagem de execuções de uma consulta durante um período e o número de vezes que houve falha na execução da consulta.
  8. Gráfico de linhas verificadas: mostra o número de linhas que a consulta verificou em um período.
  9. Gráfico de linhas retornadas: mostra o número de linhas que a consulta retornou em um período.
  10. Filtro de intervalo de tempo: filtra detalhes da consulta por períodos, como hora, dia ou um período personalizado.

Para os gráficos, buscamos os dados da tabela de estatísticas de consulta TopN, que tem três granularidades diferentes: 1 minuto, 10 minutos e 1 hora. O valor de cada ponto de dados nos gráficos representa o valor médio em um intervalo de um minuto.