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 de monitoramento do Spanner, que permitem conferir o status dos métricas essenciais para sua instância. Um deles é o gráfico Uso da CPU, Total. Este gráfico mostra a utilização total da CPU, como uma porcentagem dos recursos da CPU da instância, dividida por prioridade de tarefa e tipo de operação. Há dois tipos de tarefas: tarefas do usuário, como leituras e gravações, e tarefas do sistema, que abrange tarefas automatizadas em segundo plano, como compactação e preenchimento de índice.
A Figura 1 mostra um exemplo do gráfico Uso 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. Você abre o painel Monitoramento da instância no console do Google Cloud e examina o gráfico Utilização da CPU: total no console do Cloud. Como mostrado na Figura 1, é possível conferir o aumento no uso da CPU devido a tarefas de usuários de alta prioridade. A próxima etapa é descobrir qual operação de usuário de alta prioridade está causando esse aumento do uso da CPU.
É possível visualizar essa e outras métricas em uma série temporal usando os painéis Insights de consulta. Esses painéis pré-criados ajudam a conferir picos de utilização da CPU e identificar consultas ineficientes.
Identifique qual operação do usuário está causando o pico de uso da CPU
O gráfico Uso da CPU: total na Figura 1 mostra que as tarefas de usuário de alta prioridade são a causa do maior uso da CPU.
Em seguida, você vai examinar o gráfico Utilização da CPU por tipo de operação no console do Cloud. Este gráfico mostra a CPU utilização 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 de operação ou e é possível exibir cada tipo de operação como uma linha no guia da de uso 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 executar a instrução SQL Select e alterar consultas de fluxo. |
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 de uso 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 de cima do gráfico. Ele representa cada tipo ou categoria de operação em um gráfico de linhas. As categorias listados abaixo do gráfico identificam cada gráfico. É possível ocultar e mostrar cada gráfico marcando ou desmarcando o respectivo filtro de categoria.
Como alternativa, você também pode criar esse gráfico no Metrics Explorer, conforme descrito abaixo:
Criar um gráfico de utilização da CPU por operações no Metrics Explorer
- No console do Google Cloud, selecione Monitoring ou use o botão a seguir:
- 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.
Já a métrica Utilização da CPU por prioridade na seção anterior ajudou a determinar se uma tarefa do usuário ou do sistema causou um aumento na CPU uso de recursos, com a métrica Utilização da CPU por tipo de operação, que você pode analisar e descobrir o tipo de operação iniciada pelo usuário por trás desse aumento na CPU uso.
Identifique qual solicitação do usuário contribui para o aumento do uso da CPU
Determinar qual solicitação específica do usuário é responsável pelo pico na CPU no gráfico de tipo de operação executesql_select_readonly Figura 2, você vai usar as tabelas integradas de estatísticas de introspecção para ter mais informações.
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 | Não | Sim | Não |
read_readwrite | Não | Sim | Sim |
read_withpartitiontoken | Não | Sim | Não |
executesql_select_readonly | Sim | Não | Não |
executesql_select_withpartitiontoken | Sim | Não | Não |
executesql_select_readwrite | Sim | Não | Sim |
executesql_dml_readwrite | Sim | Não | Sim |
executesql_dml_partitioned | Não | Não | Sim |
beginorcommit | Não | Não | 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 a motivo do aumento de uso da CPU que você está observando. Com base na tabela anterior, confira as estatísticas de consulta ao lado para descobrir quais consultas são caras, executadas com frequência ou verificar muitos dados.
Para descobrir as consultas com o maior uso de CPU na hora anterior, execute
a consulta a seguir 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 da CPU, tente as opções a seguir para ajustá-lo.
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 uma linha de base 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. A adição de capacidade de computação fornece mais recursos de CPU e permite que o Spanner processe 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.