Investigue a utilização elevada da CPU

Esta página descreve como usar as métricas e os gráficos de utilização da CPU, juntamente com outras ferramentas de introspeção, para investigar a utilização elevada da CPU na sua base de dados.

Identifique se uma tarefa do sistema ou do utilizador está a causar uma utilização elevada da CPU

A Google Cloud consola oferece várias ferramentas de monitorização para o Spanner, o que lhe permite ver o estado das métricas mais essenciais para a sua instância. Um deles é um gráfico denominado Utilização da CPU - Total. Este gráfico mostra a utilização total da CPU, como uma percentagem dos recursos da CPU da instância, discriminada por prioridade da tarefa e tipo de operação. Existem dois tipos de tarefas: tarefas do utilizador, como leituras e escritas, e tarefas do sistema, que abrangem tarefas automatizadas em segundo plano, como a compactação e o preenchimento de índices.

A Figura 1 mostra um exemplo do gráfico Utilização da CPU – Total.

Exemplo de um gráfico de utilização da CPU – Total

Figura 1. Gráfico Utilização da CPU – total no painel de controlo de monitorização na Google Cloud consola.

Agora, imagine que recebe um alerta do Cloud Monitoring a indicar que a utilização da CPU aumentou significativamente. Abra o painel de controlo Monitoring para a sua instância na consola do Google Cloud e examine o gráfico Utilização da CPU – Total na Cloud Console. Google Cloud Conforme mostrado na Figura 1, pode ver o aumento da utilização da CPU devido a tarefas de utilizador de alta prioridade. O passo seguinte é descobrir que operação do utilizador de alta prioridade está a causar este aumento da utilização da CPU.

Pode visualizar esta e outras métricas numa série cronológica através dos painéis de controlo de Estatísticas de consultas. Estes painéis de controlo pré-criados ajudam a ver picos na utilização da CPU e a identificar consultas ineficientes.

Identifique que operação do utilizador está a causar o pico de utilização da CPU

O gráfico Utilização da CPU – Total na Figura 1 mostra que as tarefas de utilizador de alta prioridade são a causa de uma utilização da CPU mais elevada.

Em seguida, vai analisar o gráfico Utilização da CPU por tipo de operação na Cloud Console. Este gráfico mostra a utilização da CPU discriminada por operações iniciadas pelo utilizador de prioridade alta, média e baixa.

O que é uma operação iniciada pelo utilizador?

Uma operação iniciada pelo utilizador é uma operação iniciada através de um pedido de API. O Spanner agrupa estes pedidos em tipos de operações ou categorias, e pode apresentar cada tipo de operação como uma linha no gráfico Utilização da CPU por tipo de operação. A tabela seguinte descreve os métodos da API incluídos em cada tipo de operação.

Operação Métodos da API Descrição
read_readonly Read
StreamingRead
Inclui leituras que obtêm linhas da base de dados através de pesquisas e verificações de chaves.
read_readwrite Read
StreamingRead
Inclui leituras em transações de leitura/escrita.
read_withpartitiontoken Read
StreamingRead
Inclui operações de leitura realizadas através de um conjunto de tokens de partição.
executesql_select_readonly ExecuteSql
ExecuteStreamingSql
Inclui a execução da declaração SQL Select e a alteração das consultas de streams.
executesql_select_readwrite ExecuteSql
ExecuteStreamingSql
Inclui a execução da declaração Select em transações de leitura/escrita.
executesql_select_withpartitiontoken ExecuteSql
ExecuteStreamingSql
Inclui a execução da declaração Select realizada com um conjunto de tokens de partição.
executesql_dml_readwrite ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
Inclui a execução da declaração SQL DML.
executesql_dml_partitioned ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
Inclui a execução da declaração SQL DML particionada.
beginorcommit BeginTransaction
Commit
Rollback
Inclui transações de início, confirmação e reversão.
misc PartitionQuery
PartitionRead
GetSession
CreateSession
Inclui PartitionQuery, PartitionRead, Create Database, Create Instance, operações relacionadas com a sessão, operações de publicação internas críticas em termos de tempo, etc.

Segue-se um exemplo de um gráfico da métrica Utilização da CPU por tipos de operações.

Exemplo de um gráfico de utilização da CPU por tipo de operação

Figura 2. Gráfico Utilização da CPU por tipo de operação na Google Cloud consola.

Pode limitar a apresentação a uma prioridade específica através do menu Prioridade na parte superior do gráfico. Representa cada tipo de operação ou categoria num gráfico de linhas. As categorias indicadas abaixo do gráfico identificam cada gráfico. Pode ocultar e mostrar cada gráfico selecionando ou desmarcando o respetivo filtro de categoria.

Em alternativa, também pode criar este gráfico no explorador de métricas, conforme descrito abaixo:

Crie um gráfico para a utilização da CPU por tipo de operações no explorador de métricas

  1. Na Google Cloud consola, selecione Monitorização, ou use o seguinte botão:

    Aceder a Monitorização

  2. Selecione Explorador de métricas no painel de navegação.
  3. No campo Encontre o tipo de recurso e a métrica, introduza o valor spanner.googleapis.com/instance/cpu/utilization_by_operation_type e, de seguida, selecione a linha apresentada abaixo da caixa.
  4. No campo Filtro, introduza o valor instance_id e, de seguida, introduza o ID da instância que quer examinar e clique em >Aplicar.
  5. No campo Agrupar por, selecione category na lista pendente. O gráfico mostra a utilização da CPU das tarefas do utilizador agrupadas por tipo de operação ou categoria.

Embora a métrica Utilização da CPU por prioridade na secção anterior tenha ajudado a determinar se uma tarefa do utilizador ou do sistema causou um aumento na utilização de recursos da CPU, com a métrica Utilização da CPU por tipo de operação, pode analisar mais detalhadamente e descobrir o tipo de operação iniciada pelo utilizador por detrás deste aumento na utilização da CPU.

Identifique o pedido de utilizador que está a contribuir para o aumento da utilização da CPU

Para determinar que pedido específico do utilizador é responsável pelo pico de utilização da CPU no gráfico do tipo de operação executesql_select_readonly que vê na Figura 2, vai usar as tabelas de estatísticas de introspeção incorporadas para obter mais informações.

Use a tabela seguinte como um guia para determinar a tabela de estatísticas a consultar com base no tipo de operação que está a causar uma utilização elevada da CPU.

Tipo de operação Consulta Leitura 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, resolva-o usando estatísticas de leitura.

Neste cenário, a operação executesql_select_readonly parece ser o motivo do aumento da utilização da CPU que está a observar. Com base na tabela anterior, deve analisar as estatísticas de consultas para saber que consultas são dispendiosas, executadas com frequência ou analisam muitos dados.

Para saber as consultas com a utilização mais elevada da CPU na hora anterior, pode executar 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 mostra as consultas ordenadas por utilização da CPU. Depois de identificar a consulta com a utilização mais elevada da CPU, pode experimentar as seguintes opções para a otimizar.

  • Reveja o plano de execução de consultas para identificar possíveis ineficiências que possam contribuir para uma elevada utilização da CPU.

  • Reveja a sua consulta para se certificar de que está a seguir as práticas recomendadas de SQL.

  • Reveja a estrutura do esquema da base de dados e atualize o esquema para permitir consultas mais eficientes.

  • Estabeleça uma base para o número de vezes que o Spanner executa uma consulta durante um intervalo. Com esta base, pode detetar e investigar a causa de desvios inesperados do comportamento normal.

Se não conseguiu encontrar uma consulta com utilização intensiva da 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 o artigo Aumentar a capacidade de computação.

O que se segue?