Analisar desempenho da consulta

Nesta página, descrevemos como usar o painel do Query Insights para detectar e analisar problemas de desempenho do Spanner.

Visão geral do Query Insights

O Query Insights ajuda a detectar e diagnosticar problemas de desempenho de consultas e instruções DML (INSERT, UPDATE e DELETE) em um banco de dados do Spanner. 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.

O Query Insights ajuda a melhorar o desempenho de consulta do Spanner, orientando você pelas seguintes etapas:

  1. Determine se consultas ineficientes estão causando alta utilização da CPU.
  2. Identificar uma consulta ou tag potencialmente problemática.
  3. Analisar a consulta ou tag de solicitação para identificar problemas.

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

Preços

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

Retenção de dados

O Query Insights retém dados por no máximo 30 dias. Para o gráfico Uso total da CPU (por tag de consulta ou solicitação), o Spanner recupera dados das tabelas SPANNER_SYS.QUERY_STATS_TOP_*. Essas tabelas têm uma retenção máxima de 30 dias. Consulte Retenção de dados para saber mais.

Funções exigidas

Você precisa 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 do Query Insights, peça ao administrador para conceder a você os seguintes papéis do IAM na instância:

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

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

Usuário do controle de acesso refinado

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

  • Ter o papel de Leitor do Cloud Spanner (roles/spanner.viewer)
  • Ter privilégios de controle de acesso refinado e receber o papel do sistema spanner_sys_reader ou um dos papéis de membro dele.
  • Selecione spanner_sys_reader ou um papel de membro como seu 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 refinado e Papéis do sistema de controle de acesso refinado.

O painel do Query Insights

O painel do Query Insights mostra a carga de consulta com base no banco de dados e no período selecionados. A carga de consulta é uma medida da utilização total da CPU para todas as consultas na instância no período selecionado. O painel fornece uma série de filtros que ajudam você a visualizar a carga de consulta.

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

  1. Selecione Query Insights 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 do banco de dados.

As áreas do painel incluem:

  1. Lista de bancos de dados: filtra a carga de consulta em um banco de dados específico ou em todos os bancos de dados.
  2. Filtro de período: filtra a carga de consulta por períodos, como horas, dias ou um período personalizado.
  3. Gráfico de uso total da CPU (todas as consultas): exibe a taxa média agregada de uso da CPU (em segundos de CPU por minuto) de todas as consultas.
  4. Gráfico de uso total da CPU (por tag de consulta ou solicitação): exibe a taxa média de uso da CPU (em segundos de CPU por minuto) por cada tag de consulta ou solicitação.
  5. Tabela de consultas e tags TopN: mostra a lista das principais consultas e tags de solicitação classificadas por uso da CPU. Consulte Identificar uma consulta ou tag potencialmente problemática.

Painel do Query Insights

Desempenho do painel

Use parâmetros de consulta ou marque suas consultas para otimizar o desempenho do Query Insights. Se você não parametrizar ou marcar suas consultas, muitos resultados poderão ser retornados, o que pode fazer com que a tabela de consultas e tags TopN não seja carregada corretamente.

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

O uso total da CPU é uma medida da taxa média de uso da CPU (em segundos de CPU por minuto) que as consultas executadas no banco de dados selecionado realizam ao longo do tempo.

Uso total da CPU em todas as consultas

Analise o gráfico para responder a estas perguntas:

  • Qual banco de dados está passando pela carga? Selecione diferentes bancos de dados na lista "Bancos de dados" para encontrar os bancos de dados com as cargas mais altas. Para descobrir qual banco de dados tem a maior carga, você também pode analisar o gráfico Uso da CPU - total para bancos de dados no console doGoogle Cloud .

    Carga do banco de dados

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

  • Há quanto tempo o uso da CPU está alto? Houve um pico recente ou ela tem sido alta por algum 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.

Se você notar um pico ou uma elevação no gráfico correspondente ao uso geral da CPU da instância, é provável que isso se deva 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.

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

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

Consultas TopN

Aqui, vemos que a consulta com a impressão digital 3216067328234137024 tem uma alta utilização de CPU e pode ser problemática.

A tabela Consultas TopN fornece uma visão geral das consultas que usam mais CPU durante a janela de tempo escolhida, classificadas da maior para a menor. O número de consultas TopN é limitado a 100.

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

Recomendamos que você adicione tags às suas consultas SQL. A inclusão de 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.

Tabela de consultas TopN

A tabela mostra as seguintes propriedades:

  • Impressão digital: hash da tag de solicitação ou, se a tag não estiver presente, um hash do texto da consulta.
  • Tag de solicitação ou consulta: se a consulta tiver uma tag associada, a tag de solicitação será mostrada. 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 de tag. Para saber mais sobre como usar 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, truncada para aproximadamente 64 KB, será mostrada. Para DML em lote, as instruções SQL são niveladas em uma única linha e concatenadas usando um delimitador de ponto e vírgula. Textos SQL idênticos consecutivos são deduplicados 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.

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

  • Recomendação: o Spanner analisa suas consultas para determinar se elas podem se beneficiar de índices aprimorados. Se sim, ele recomenda índices novos ou alterados que podem melhorar o desempenho da consulta. Para mais informações, consulte Usar o consultor de índice do Spanner.

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

  • Contagem de execuções: a taxa média de execuções de consulta, em execuções por minuto, que o Spanner observou 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: número médio de linhas que a consulta verificou, excluindo valores excluídos.

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

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

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

Talvez você perceba alguma variação entre o gráfico Uso total da CPU (todas as consultas) e o gráfico Uso total da CPU (por tag de solicitação ou consulta). 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 uso total da CPU (por tag de consulta ou solicitação), podem ser calculados em média ao longo de 10 minutos (ou 1 hora). Nesse caso, podemos perder dados de alta granularidade que vemos no gráfico de uso 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 consulta ou tag de solicitação é a causa raiz do problema, clique na consulta ou tag de solicitação que parece ter a maior carga ou que está levando mais tempo do que as outras. É possível selecionar várias consultas e tags de solicitação de uma só vez.

Mantenha o ponteiro do mouse sobre o gráfico para ver o uso da CPU (em segundos) das consultas ao longo da linha do tempo.

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 apresentar baixo desempenho.
  • Houve picos de uso da CPU? É possível alterar a janela de tempo para estudar o uso histórico de CPU da consulta.
  • Qual é o consumo de recursos? Como ele se relaciona com outras consultas? Analise a tabela e compare os dados de outras consultas com a selecionada. Há uma grande diferença?

Para confirmar se a consulta selecionada está contribuindo para o alto uso da CPU, é possível detalhar os detalhes do formato de consulta específico (ou tag de solicitação) e analisá-lo mais detalhadamente na página de detalhes da consulta.

Acessar a página de detalhes da consulta

Para ver os detalhes de um formato de consulta ou tag de solicitação específico em um formulário gráfico, clique na impressão digital associada à consulta ou tag de solicitação. A página de detalhes da consulta é aberta.

Página de detalhes da consulta

A página de 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 o REQUEST_TAG correspondente a essa string de tag. Somente o texto de uma dessas consultas é mostrado nesse campo. Para DML em lote, o conjunto de instruções SQL é nivelado em uma única linha, concatenada usando um delimitador de ponto e vírgula. Os textos SQL idênticos consecutivos são desduplicados antes da truncagem.
  2. Os valores dos seguintes campos:
    • Contagem de execuções: a taxa média de execuções de consulta, em execuções por minuto, que o Spanner identificou durante o intervalo.
    • Média de CPU (ms): consumo médio de recursos de CPU, em milissegundos, por uma consulta dos recursos de 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 da sobrecarga.
    • Média de linhas retornadas: número médio de linhas retornadas pela consulta.
    • Média de linhas verificadas: número médio de linhas que a consulta verificou, excluindo valores excluídos.
    • Média de bytes: número de bytes de dados retornados pela consulta, 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 amostrado em um momento específico e a latência de consulta específica. Clique em um dos pontos no gráfico para conferir 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 particionadas.
  4. Visualizador de planos de consulta: mostra o plano de consulta de amostra selecionado. O Spanner oferece as seguintes opções de layout:

    • Visualização em árvore: mostra o plano de consulta como um gráfico em que cada nó ou card representa um iterador que consome linhas das entradas e produz linhas para o pai. Clique em cada iterador para ver mais informações.
    • Visualização sequencial: mostra o plano de consulta em uma tabela hierárquica em que cada linha representa um operador. Clique em cada linha para ver mais informações.

      Visualização sequencial de um plano de consulta

      A tabela mostra as seguintes colunas:

      • Nome: o nome do operador.
      • Grupo de máquinas: o grupo de máquinas em que esse operador foi executado.
      • Latência: o tempo decorrido durante a execução da operação atual. Esse valor pode ser maior que o tempo de CPU (por exemplo, se o operador aguardou chamadas remotas ou atrasos no sistema de arquivos).
      • Latência cumulativa: o tempo decorrido durante a execução de toda a subárvore com acesso root neste operador. Isso não inclui o tempo de criação do plano e outras sobrecargas. Portanto, a latência cumulativa pode ser menor que a duração total da consulta.
      • Tempo de CPU: tempo total que a CPU levou para executar a consulta. Não inclui latência da rede. Algumas partes da execução da consulta podem continuar em paralelo, então é possível que o tempo de CPU seja maior que o tempo decorrido total. Por exemplo, se uma consulta executar dez operações em paralelo em 1 milissegundo (ms), o tempo decorrido será de 1 ms, mas o tempo de CPU será de 10 ms.
      • Linhas retornadas: o número de linhas retornadas pelo operador.
  5. Gráfico de latência da consulta: mostra o valor da latência de uma consulta selecionada em um período. Ele também mostra a latência média.

  6. Gráfico de uso da CPU: mostra o uso da CPU por uma consulta, em porcentagem, durante um período. Ele também mostra a utilização média da CPU.

  7. Gráfico de contagem de execuções/falhas: mostra a taxa média de execuções de consulta (em execuções por minuto) em um período e a taxa média de execuções de consulta com falha (em execuções com falha por minuto).

  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 período: filtra os 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 min, 10 min e 1 hora. O valor de cada ponto de dados nos gráficos representa o valor médio em um intervalo de um minuto.

Pesquisar todas as execuções de uma consulta no registro de auditoria

Para pesquisar todas as execuções de uma impressão digital de consulta específica nos Registros de auditoria do Cloud, consulte o registro de auditoria e pesquise qualquer query_fingerprint que corresponda ao campo Fingerprint na tabela de estatísticas de consulta TopN. Para mais informações, consulte a Visão geral de consultas e registros de registros. Use esse método para identificar o usuário que iniciou a consulta.

A seguir