CPU
Ocorre quando um thread está ativo na CPU ou está aguardando a CPU.
Versões compatíveis do mecanismo
As informações sobre eventos de espera são relevantes para o Aurora PostgreSQL versão 9.6 e versões superiores.
Contexto
A unidade de processamento central (CPU) é o componente de um computador que executa instruções. Por exemplo, instruções de CPU realizam operações aritméticas e trocam dados na memória. Se uma consulta aumentar o número de instruções que ela executa por meio do mecanismo de banco de dados, o tempo gasto na execução dessa consulta aumentará. Programação da CPU refere-se a alocar tempo de CPU a um processo. A programação é orquestrada pelo kernel do sistema operacional.
Tópicos
Como saber quando essa espera ocorre
Esse evento de espera CPU
indica que um processo de backend está ativo na CPU ou aguardando a CPU. É possível determinar que isso está ocorrendo quando uma consulta mostra as seguintes informações:
-
A coluna
pg_stat_activity.state
tem o valoractive
. -
As colunas
wait_event_type
ewait_event
empg_stat_activity
são ambasnull
.
Para ver os processos de backend que estão utilizando ou aguardando CPU, execute a seguinte consulta.
SELECT * FROM pg_stat_activity WHERE state = 'active' AND wait_event_type IS NULL AND wait_event IS NULL;
Métrica DBLoadCPU
A métrica do Performance Insights para CPU é DBLoadCPU
. O valor de DBLoadCPU
pode diferir do valor da métrica CPUUtilization
do Amazon CloudWatch. A última métrica é coletada do HyperVisor para uma instância de banco de dados.
Métricas os.cpuUtilization
As métricas do Performance Insights para o sistema operacional fornecem informações detalhadas sobre a utilização da CPU. Por exemplo, é possível exibir as seguintes métricas:
-
os.cpuUtilization.nice.avg
-
os.cpuUtilization.total.avg
-
os.cpuUtilization.wait.avg
-
os.cpuUtilization.idle.avg
O Performance Insights relata o uso da CPU pelo mecanismo de banco de dados como os.cpuUtilization.nice.avg
.
Provável causa da programação da CPU
Do ponto de vista do sistema operacional, a CPU está ativa quando não executa o thread ocioso. A CPU está ativa enquanto faz um cálculo, mas também está ativa quando aguarda E/S de memória. Esse tipo de E/S domina uma workload típica de banco de dados.
É provável que os processos aguardem para serem programados em uma CPU quando as seguintes condições forem atendidas:
-
A métrica
CPUUtilization
do CloudWatch está próxima dos 100%. -
A carga média é maior que o número de vCPUs, indicando uma carga pesada. Você pode encontrar a métrica
loadAverageMinute
na seção de métricas do sistema operacional do Performance Insights.
Possíveis causas do maior número de esperas
Quando o evento de espera de CPU ocorre mais que o normal, possivelmente indicando um problema de performance, as causas típicas incluem:
Tópicos
Possíveis causas de picos súbitos
As causas mais prováveis de picos súbitos são as seguintes:
-
Sua aplicação abriu muitas conexões simultâneas com o banco de dados. Esse cenário é conhecido como “tempestade de conexões”.
-
A workload da sua aplicação foi alterada de qualquer uma das seguintes maneiras:
-
Novas consultas
-
Um aumento no tamanho do conjunto de dados
-
Manutenção ou criação de índices
-
Novas funções
-
Novos operadores
-
Um aumento na execução de consultas paralelas
-
-
Seus planos de execução de consultas foram modificados. Em certos casos, uma alteração pode causar um aumento nos buffers. Por exemplo, a consulta agora está utilizando uma varredura sequencial quando utilizava anteriormente um índice. Nesse caso, ela precisa de mais CPU para atingir o mesmo objetivo.
Possíveis causas de alta frequência a longo prazo
As causas mais prováveis de eventos que se repetem por um longo período são:
-
Muitos processos de backend estão em execução simultaneamente na CPU. Esses processos podem ser operadores paralelos.
-
Consultas estão sendo executadas com performance abaixo do ideal porque precisam de um grande número de buffers.
Casos excepcionais
Se nenhuma das causas prováveis revelarem ser causas reais, as seguintes situações podem estar ocorrendo:
-
A CPU está alternando processos para dentro e para fora.
-
A alternância de contexto da CPU aumentou.
-
O código do Aurora PostgreSQL não inclui eventos de espera.
Ações
Se o evento de espera CPU
domina a atividade do banco de dados, isso não indica necessariamente um problema de performance. Responda a esse evento somente quando a performance diminuir.
Tópicos
Investigar se o banco de dados está causando o aumento da CPU
Examine a métrica os.cpuUtilization.nice.avg
no Performance Insights. Se esse valor for muito menor que o uso da CPU, processos que não são do banco de dados são os principais colaboradores para a CPU.
Determinar se o número de conexões aumentou
Examine a métrica DatabaseConnections
no Amazon CloudWatch. Sua ação depende se o número aumentou ou diminuiu durante o período de maior número de eventos de espera de CPU.
As conexões aumentaram
Se o número de conexões aumentou, compare o número de processos de backend que consumem CPU com o número de vCPUs. Os cenários a seguir são possíveis:
-
O número de processos de backend que consomem CPU é menor que o número de vCPUs.
Nesse caso, o número de conexões não é um problema. Porém, você ainda pode tentar reduzir a utilização da CPU.
-
O número de processos de backend que consomem CPU é maior que o número de vCPUs.
Nesse caso, considere as opções a seguir:
-
Diminua o número de processos de backend conectados ao banco de dados. Por exemplo, implemente uma solução de agrupamento de conexões, como o RDS Proxy. Para saber mais, consulte Usar o Amazon RDS Proxy para o Aurora.
-
Atualize o tamanho da sua instância para obter um número maior de vCPUs.
-
Se aplicável, redirecione algumas workloads somente leitura para nós de leitor.
-
As conexões não aumentaram
Examine as métricas blks_hit
no Performance Insights. Procure uma correlação entre um aumento em blks_hit
e o uso da CPU. Os cenários a seguir são possíveis:
-
O uso da CPU e
blks_hit
estão correlacionados.Nesse caso, encontre as principais instruções SQL vinculadas ao uso da CPU e procure modificações no plano. Você pode usar uma das seguintes técnicas:
-
Explicar os planos manualmente e compare-os com o plano de execução esperado.
-
Procurar um aumento nos acertos de bloco por segundo e nos acertos de blocos locais por segundo. Na seção Top SQL (SQL principal) do painel do Performance Insights, escolha Preferences (Preferências).
-
-
O uso da CPU e
blks_hit
não estão correlacionados.Nesse caso, determine se alguma das seguintes situações ocorre:
-
A aplicação está se conectando e se desconectando rapidamente ao/do banco de dados.
Diagnostique esse comportamento ativando
log_connections
elog_disconnections
e analisando os logs do PostgreSQL. Considere utilizar o analisador de logspgbadger
. Para mais informações, consulte https://github.com/darold/pgbadger. -
O sistema operacional está sobrecarregado.
Nesse caso, o Performance Insights mostra que processos de backend estão consumindo CPU por mais tempo que o normal. Procure evidências nas métricas
os.cpuUtilization
do Performance Insights ou na métricaCPUUtilization
do CloudWatch. Se o sistema operacional estiver sobrecarregado, consulte as métricas de monitoramento avançado para aprofundar o diagnóstico. Especificamente, observe a lista de processos e a porcentagem de CPU consumida por cada um. -
As principais instruções SQL estão consumindo muita CPU.
Examine instruções que estão vinculadas ao uso da CPU para verificar se elas podem utilizar menos CPU. Execute um comando
EXPLAIN
e concentre-se nos nós do plano que têm o maior impacto. Considere utilizar um visualizador de plano de execução do PostgreSQL. Para experimentar essa ferramenta, consulte http://explain.dalibo.com/.
-
Responder a alterações de workload
Se a sua workload mudou, procure os seguintes tipos de alterações:
- Novas consultas
-
Verifique se novas consultas são esperadas. Em caso positivo, verifique se os planos de execução dessas consultas e o número de execuções por segundo são os esperados.
- Um aumento no tamanho do conjunto de dados
-
Determine se o particionamento, caso ainda não esteja implementado, pode ajudar. Essa estratégia é capaz de reduzir o número de páginas que uma consulta precisa recuperar.
- Manutenção ou criação de índices
-
Verifique se a programação de manutenção é a esperada. Uma prática recomendada é agendar atividades de manutenção fora das atividades de pico.
- Novas funções
-
Confirme se essas funções são executadas conforme o esperado durante o teste. Especificamente, confira se o número de execuções por segundo é o esperado.
- Novos operadores
-
Verifique se eles funcionam conforme o esperado durante os testes.
- Um aumento na execução de consultas paralelas
-
Determine se alguma das situações a seguir ocorreu:
-
As relações ou os índices envolvidos cresceram de repente a ponto de diferirem significativamente de
min_parallel_table_scan_size
oumin_parallel_index_scan_size
. -
Alterações recentes foram feitas em
parallel_setup_cost
ouparallel_tuple_cost
. -
Alterações recentes foram feitas em
max_parallel_workers
oumax_parallel_workers_per_gather
.
-