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.
Identificar se um sistema ou uma tarefa do usuário está causando alta utilização da CPU
O console doGoogle 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 é o gráfico Uso da CPU: total. Este gráfico mostra o uso total da CPU, como uma porcentagem dos recursos da CPU da instância, dividido 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 abrangem tarefas automatizadas em segundo plano, como compactação e preenchimento de índice.
A Figura 1 mostra um exemplo do gráfico Utilização da CPU: total.
Figura 1. Gráfico de 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 Monitoring da instância no console do Google Cloud e examine o gráfico Utilização da CPU: total no console do Google Cloud . Como mostrado na Figura 1, é possível ver o aumento na utilização da CPU devido a tarefas de usuário de alta prioridade. A próxima etapa é descobrir qual operação do 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 Insights de consulta. Esses painéis predefinidos ajudam você a ver picos no uso da CPU e identificar consultas ineficientes.
Identificar qual operação do usuário está causando o pico de utilização 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, examine o gráfico Utilização da CPU por tipo de operação em Google Cloud console. 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ções, e você pode 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 execução da instrução SQL Select e 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 de utilização da CPU por tipo de operação em Google Cloud console.
É 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 de operação ou categoria em um gráfico de linhas. As categorias listadas abaixo do gráfico identificam cada um deles. É possível ocultar e mostrar cada gráfico marcando ou desmarcando o respectivo filtro de categoria.
Ou então, crie esse gráfico no Metrics Explorer, conforme descrito abaixo:
Como criar um gráfico para utilização da CPU por tipo de operação no Metrics Explorer
- No console 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_typee clique na linha exibida abaixo da caixa. -
No campo Filtro, insira o valor
instance_ide, em seguida, o ID da instância a ser examinada e clique em Aplicar. -
No campo Agrupar por, selecione
categoryna 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 Uso da CPU por prioridade na 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 Uso 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 no uso da CPU no gráfico de tipos de operação executesql_select_readonly visto na Figura 2, use as tabelas integradas de estatísticas de introspecção para receber 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 | 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 o motivo do aumento no 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 verificam 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 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 garantir que ela esteja 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.
Confira a lista de métricas do Spanner.