Nesta página, descrevemos como usar métricas e gráficos de utilização da CPU, além de outras ferramentas de introspecção, para investigar o alto uso de CPU no seu banco de dados.
Identifique se uma tarefa do sistema ou do usuário está causando um alto uso da CPU
O console do Google Cloud oferece várias ferramentas de monitoramento para o Spanner, permitindo que você veja o status das métricas mais essenciais para sua instância. Um deles é um gráfico chamado Utilização da CPU - Total. Este gráfico mostra o uso total da CPU como porcentagem dos recursos da CPU da instância, detalhado por prioridade de tarefa e tipo de operação. Existem dois tipos de tarefas: tarefas do usuário, como leituras e gravações, e tarefas do sistema, que abrangem tarefas automatizadas em segundo plano, como compactação e preenchimento de índices.
A Figura 1 mostra um exemplo do gráfico Utilização da CPU - Total.
Figura 1. Gráfico Utilização da CPU: total no painel do Monitoring no console do Google Cloud.
Agora, imagine que você receba um alerta do Cloud Monitoring informando que o uso da CPU aumentou significativamente. Abra o painel Monitoramento da instância no console do Google Cloud e examine o gráfico Utilização da CPU: total no console. Conforme mostrado na Figura 1, é possível ver o aumento da utilização da CPU por tarefas de usuário de alta prioridade. A próxima etapa é descobrir qual operação de usuário de alta prioridade está causando esse aumento no uso da CPU.
É possível visualizar essa e outras métricas em uma série temporal usando os painéis de Insights de consulta. Esses painéis pré-criados ajudam você a visualizar picos de utilização da CPU e identificar consultas ineficientes.
Identifique qual operação do usuário está causando o pico de utilização da CPU
O gráfico Utilização da CPU: total na Figura 1 mostra que as tarefas do usuário de alta prioridade são a causa do maior uso da CPU.
Em seguida, você vai analisar o gráfico Utilização da CPU por tipo de operação no console do Cloud. Este gráfico mostra a utilização da CPU dividida por operações iniciadas pelo usuário de alta, média e baixa prioridade.
O que é uma operação iniciada pelo usuário?
Uma operação iniciada pelo usuário é uma operação iniciada por meio de uma solicitação de API. O Spanner agrupa essas solicitações em tipos ou categorias de operação, e é possível exibir cada tipo de operação como uma linha no gráfico Utilização da CPU por tipo de operação. A tabela a seguir descreve os métodos de API incluídos em cada tipo de operação.
Operação | Métodos da API | Descrição |
---|---|---|
read_readonly | Read StreamingRead |
Inclui leituras que buscam linhas do banco de dados usando pesquisas e verificações de chave. |
read_readwrite | Read StreamingRead |
Inclui leituras dentro de transações de leitura e gravação. |
read_withpartitiontoken | Read StreamingRead |
Inclui operações de leitura realizadas usando um conjunto de tokens de partição. |
executesql_select_readonly | ExecuteSql ExecuteStreamingSql |
Inclui a instrução SELECT SQL e as consultas de fluxo de alterações. |
executesql_select_readwrite | ExecuteSql ExecuteStreamingSql |
Inclui a execução da instrução Select em transações de leitura e gravação. |
executesql_select_withpartitiontoken | ExecuteSql ExecuteStreamingSql |
Inclui a execução da instrução Select executada usando um conjunto de tokens de partição. |
executesql_dml_readwrite | ExecuteSql ExecuteStreamingSql ExecuteBatchDml |
Inclui executar a instrução SQL DML. |
executesql_dml_partitioned | ExecuteSql ExecuteStreamingSql ExecuteBatchDml |
Inclui a execução da instrução SQL DML particionada. |
beginorcommit | BeginTransaction Confirmação Reverter |
Inclui transações de início, confirmação e reversão. |
misc | PartitionQuery PartitionRead GetSession CreateSession |
Inclui PartitionQuery, PartitionRead, Criar banco de dados, criar instância, operações relacionadas à sessão, operações de exibição internas com limite de tempo etc. |
Veja um exemplo de gráfico da métrica de utilização da CPU por tipos de operação.
Figura 2. Gráfico Utilização da CPU por tipo de operação no console do Google Cloud.
É possível limitar a exibição a uma prioridade específica usando o menu Prioridade na parte superior do gráfico. Ele representa cada tipo ou categoria de operação em um gráfico de linhas. As categorias listadas abaixo do gráfico identificam cada gráfico. É possível ocultar e mostrar cada gráfico marcando ou desmarcando o respectivo filtro de categoria.
Também é possível criar esse gráfico no Metrics Explorer, conforme descrito abaixo:
Crie um gráfico de uso da CPU por tipo de operações no Metrics Explorer
- No console do Google Cloud, selecione Monitoramento ou use este botão:
- Selecione Metrics Explorer no painel de navegação.
-
No campo Localizar tipo de recurso e métrica, insira o valor
spanner.googleapis.com/instance/cpu/utilization_by_operation_type
e clique na linha exibida abaixo da caixa. -
No campo Filtro, insira o valor
instance_id
e, em seguida, o ID da instância a ser examinada e clique em Aplicar. -
No campo Agrupar por, selecione
category
na lista suspensa. O gráfico mostrará a utilização da CPU das tarefas do usuário agrupadas por tipo de operação ou categoria.
Embora a métrica Utilização da CPU por prioridade da seção anterior tenha ajudado a determinar se uma tarefa do usuário ou do sistema causou um aumento no uso de recursos da CPU, com a métrica Utilização da CPU por tipo de operação, é possível se aprofundar e descobrir o tipo de operação iniciada pelo usuário por trás desse aumento no uso da CPU.
Identificar qual solicitação do usuário está contribuindo para o aumento do uso da CPU
Para determinar qual solicitação específica do usuário é responsável pelo pico na utilização da CPU no gráfico de tipos de operação executesql_select_readonly, mostrado na Figura 2, use as tabelas de estatísticas de introspecção integradas para ter mais insights.
Use a tabela a seguir como guia para determinar qual tabela de estatísticas consultar com base no tipo de operação que está causando o alto uso da CPU.
Tipo de operação | Query | Ler | Transação |
---|---|---|---|
read_readonly | No | Sim | No |
read_readwrite | No | Sim | Sim |
read_withpartitiontoken | No | Sim | No |
executesql_select_readonly | Sim | No | No |
executesql_select_withpartitiontoken | Sim | No | No |
executesql_select_readwrite | Sim | No | Sim |
executesql_dml_readwrite | Sim | No | Sim |
executesql_dml_partitioned | No | No | Sim |
beginorcommit | No | No | Sim |
Por exemplo, se read_withpartitiontoken for o problema, solucione problemas usando estatísticas de leitura.
Nesse cenário, a operação executesql_select_readonly parece ser o motivo do aumento no uso da CPU que você está observando. Com base na tabela anterior, você deve consultar as estatísticas de consulta ao lado para descobrir quais consultas são caras, são executadas com frequência ou verificam muitos dados.
Para descobrir as consultas com o maior uso de CPU na hora anterior, execute
a seguinte consulta na tabela de estatísticas query_stats_top_hour
.
SELECT text,
execution_count AS count,
avg_latency_seconds AS latency,
avg_cpu_seconds AS cpu,
execution_count * avg_cpu_seconds AS total_cpu
FROM spanner_sys.query_stats_top_hour
WHERE interval_end =
(SELECT MAX(interval_end)
FROM spanner_sys.query_stats_top_hour)
ORDER BY total_cpu DESC;
O resultado mostrará consultas classificadas pelo uso da CPU. Depois de identificar a consulta com o maior uso de CPU, tente as opções a seguir para ajustá-la.
Analise o plano de execução de consulta para identificar quaisquer ineficiências possíveis que possam contribuir para a alta utilização da CPU.
Revise sua consulta para verificar se ela está seguindo as práticas recomendadas de SQL.
Analise o design do esquema do banco de dados e atualize o esquema para permitir consultas mais eficientes.
Estabeleça um valor de referência para o número de vezes que o Spanner executa uma consulta durante um intervalo. Com essa linha de base, você poderá detectar e investigar a causa de quaisquer desvios inesperados do comportamento normal.
Se você não conseguiu encontrar uma consulta com uso intensivo de CPU, adicione capacidade de computação à instância. Adicionar capacidade de computação fornece mais recursos de CPU e permite que o Spanner lide com uma carga de trabalho maior. Para mais informações, consulte Como aumentar a capacidade de computação.
A seguir
Saiba mais sobre as métricas de utilização da CPU.
Saiba mais sobre outras ferramentas de introspecção.
Saiba mais sobre como monitorar com o Cloud Monitoring.
Saiba mais sobre as práticas recomendadas de SQL para o Spanner.
Consulte a lista de Métricas do Spanner.