Esta página descreve como usar o painel Query Insights para detectar e analisar problemas de desempenho.
Introdução
Os insights de consulta ajudam a detectar, diagnosticar e evitar problemas de desempenho relacionados aos bancos de dados do Cloud SQL. 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 de problemas de desempenho.
Com os insights de consulta, é 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 de insights de consulta pode ser integrada às ferramentas de monitoramento de aplicativos (APM) atuais e aos serviços do Google Cloud usando APIs e padrões abertos. Assim, é possível monitorar e solucionar problemas de consulta usando sua ferramenta favorita.
Os insights de consulta ajudam a melhorar o desempenho da consulta do Cloud SQL, orientando você pelas seguintes etapas:
- Visualizar a carga do banco de dados das consultas mais frequentes.
- Identificar uma consulta ou tag potencialmente problemática.
- Analisar a consulta ou tag para identificar problemas.
- Rastrear a origem do problema.
Os insights de consulta são compatíveis com todos os tipos de máquinas do Cloud SQL e estão disponíveis em todas as regiões do Google Cloud.
O Query Insights está disponível para o MySQL 5.7 e versões mais recentes.
Preços
Não há custo adicional para gerar o Query insights. É possível acessar uma semana de dados no painel "Insights de consulta".
Os insights de consulta não ocupam 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 os insights de consulta.
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:
- No console do Google Cloud, acesse APIs e serviços:
- Clique em Ativar APIs e serviços.
- Na barra de pesquisa, digite
Trace API
. - 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 insights de consulta
As métricas de insights de consulta são criptografadas em repouso. Os usuários com acesso ao painel do Cloud SQL podem acessar as métricas dos insights de consulta no painel "Insights de consulta". Se você tiver permissão para atualizar instâncias, pode configurar os insights de consulta. 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
-
No console do Google Cloud, acesse a página Instâncias do Cloud SQL.
- Para abrir a página Visão geral de uma instância, clique no nome dela.
- No bloco Configuração, clique em Editar configuração.
- Na seção Opções de configuração, expanda Query insights.
- Marque a caixa de seleção Ativar Query insights.
- Opcional: selecione uma ou mais das seguintes opções de insights de consulta:
- Clique em Salvar.
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.
-
No console do Google Cloud, acesse a página Instâncias do Cloud SQL.
- Clique no menu Mais ações em qualquer linha.
- Selecione Ativar o Query Insights.
- Na caixa de diálogo, marque a caixa de seleção Ativar o Query Insights para várias instâncias.
- Selecione Ativar.
- Na caixa de diálogo seguinte, selecione as instâncias para as quais você quer ativar o Query Insights.
- 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
conforme a seguir, 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 de objeto (ORM, na sigla em inglês) de código aberto sqlcommenter. Essas informações ajudam os insights de consulta a identificar a origem de um problema e a MVC desse problema. 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:
- INSIGHTS_CONFIG_QUERY_STRING_LENGTH: o tamanho da string de consulta a ser armazenado em bytes.
- API_TIER_STRING: a configuração de instância personalizada a ser usada na instância.
- REGION: a região da instância.
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 insightsConfig
configurações.
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
. resource "google_sql_database_instance" "INSTANCE_NAME" { name = "INSTANCE_NAME" database_version = "MYSQL_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
- Inicie o Cloud Shell.
-
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.
-
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 demain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
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.
- Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
- Salve as alterações.
-
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
-
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.
-
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!".
- 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 de insights de consulta são armazenados no Cloud Trace. Revise a política de retenção de dados do Cloud Trace.
Ver o painel de insights de consulta
O painel "Query Insights" mostra o carregamento da consulta com base nos fatores selecionados. A carga de consulta é uma 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 da consulta.
Para abrir o painel "Insights de consulta", siga estas etapas:
- Para abrir a página Visão geral de uma instância, clique no nome da instância.
- 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 Insights de consulta é aberto. Ele mostra as seguintes informações sobre a instância:
- 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 de insights sobre consultas de nível superior mostra o gráfico Carga do banco de dados all todas as principais consultas. Os menus suspensos no painel permitem filtrar o gráfico para um banco de dados, usuário ou endereço de cliente específico.
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.
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:
- 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.
- 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.
- 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.
- 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.
- 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 Queries fornece uma visão geral das consultas que geram a maior parte da carga de consultas. A tabela mostra todas as consultas normalizadas para a janela de tempo e as opções selecionadas no painel de insights da consulta. Ela classifica as consultas pelo tempo total de execução durante o período selecionado.
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. Os insights de consulta mostram apenas 1.024 caracteres na string de consulta por padrão.
As consultas rotuladas como
UTILITY COMMAND
geralmente incluem comandosBEGIN
,COMMIT
eEXPLAIN
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.
Média de linhas verificadas: é o número médio de linhas verificadas para a consulta.
Os insights de consulta armazenam e exibem 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.
O Query Insights exibe consultas normalizadas, ou seja,
?
substitui o valor constante literal. 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" = ?
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 do carregamento da consulta da tag selecionada ao longo do tempo.
Os insights de consulta fornecem 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, os insights de consulta fornecerão monitoramento de consulta a partir de uma visualização do aplicativo. 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.
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 Insights de consulta 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 convencional.
No painel "Insights de consulta", para ver a tabela de tags, selecione Tags. A tabela de tags as classifica pelo carregamento total por tempo total.
É 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.
- Média de linhas verificadas: é o número médio de linhas verificadas 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:
- Para classificar a lista em ordem decrescente, clique no cabeçalho Carregar por tempo total.
- 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:
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.
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
.
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 MySQL 5.7 oferece um plano de consulta estimado com a visualização EXPLAIN, enquanto o MySQL 8.0 e versões mais recentes oferecem um plano de consulta executada com a visualização EXPLAIN ANALYZE. Um plano de consulta estimado fornece o tempo de execução estimado de uma consulta, enquanto um plano de consulta executada fornece informações em tempo real de cada etapa de execução de uma determinada consulta.
Os planos de consulta no MySQL 5.7 são compatíveis com as seguintes consultas compatíveis com a instrução EXPLAIN:
Para tabelas únicas: INSERT, SELECT, UPDATE e DELETE.
Para várias tabelas: SELECT, UPDATE e DELETE.
É possível gerar planos de consulta no MySQL 8.0 e versões posteriores para todas as consultas compatíveis com o EXPLAIN ANALYZE. Essa ferramenta mostra onde o MySQL passa tempo em suas consultas SELECT para tabelas únicas e várias tabelas. O Cloud SQL não é compatível com a geração de planos de consulta de linguagem de manipulação de dados (DML) de várias tabelas porque essas consultas não são compatíveis com o ANALYZE de EXPLAIN.
O plano de consulta de amostra fornece uma visualização de EXPLAIN ANALYZE para as amostras de planos de consulta relacionadas à consulta normalizada. Esses são planos de consulta executadas que fornecem um detalhamento do tempo ativo de cada operação no plano de 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 insights de consulta.
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.
Para restringir o problema, observe o seguinte:
- Qual é o consumo de recursos?
- Como ele se relaciona com outras consultas?
- 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.
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:
- 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.
- 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.
- 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, 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.
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.
Use o Cloud Trace para ver o rastreamento completo de cada etapa do plano. No painel Insights de consulta, clique no link Visualizar no trace para abrir a ferramenta Cloud Trace. O gráfico de trace mostra todos os traces executados no período selecionado.
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 de 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 tags, que são ortogonais com estatísticas agregadas por consultas normalizadas. Os insights de consulta mostram as tags para que você saiba qual aplicativo está causando o carregamento 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 vão aparecer 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 |
|
Java |
|
Ruby |
|
Node.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=''
Os insights de consulta removem todas as outras chaves.
Desativar insights de consulta
Console
Para desativar os insights de consulta em uma instância do Cloud SQL usando o Console do Google Cloud, siga estas etapas:
-
No console do Google Cloud, acesse a página Instâncias do Cloud SQL.
- Para abrir a página Visão geral de uma instância, clique no nome dela.
- No bloco Configuração, clique em Editar configuração.
- Na seção Opções de configuração, expanda Query insights.
- Desmarque a caixa de seleção Ativar insights de consulta.
- Clique em Save.
gcloud
Para desativar os insights de consulta 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 por O 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
- Blog de lançamento: Observabilidade do banco de dados para desenvolvedores: introdução ao Cloud SQL Insights
- Consulte Métricas do Google Cloud.
- Blog: Melhore suas habilidades de solução de problemas de desempenho das consultas com o Cloud SQL Insights
- Vídeo: Introdução ao Cloud SQL Insights
- Podcast: Cloud SQL Insights
- Codelab do Insights
- Blog: Conheça o Sqlcommenter: uma biblioteca de instrumentação automática de ORM de código aberto (em inglês)
- Blog: Ativar a inclusão de tags de consulta com o Sqlcommenter