Como soluciono problemas de alta utilização da CPU no Amazon RDS for Oracle Database?

Data da última atualização: 29/10/2021

Estou tendo problemas com alta utilização da CPU no meu Amazon Relational Database Service (Amazon RDS) para instância de banco de dados Oracle.

Breve descrição

Se o banco de dados do RDS for Oracle tiver alto uso de CPU, use uma combinação das seguintes ferramentas para identificar a causa:

  • Métricas do Amazon CloudWatch
  • Métricas de monitoramento aprimoradas
  • Métricas de Performance Insights
  • Oracle Statspack
  • Automatic Workload Repository (AWR)
  • Automatic Database Diagnostic Monitor (ADDM)
  • Active Session History (ASH)
  • Oracle SQLT

Resolução

Ao diagnosticar problemas relacionados à alta utilização da CPU, identifique o período de tempo em que o problema ocorreu.

Métricas do CloudWatch

O Amazon RDS envia métricas para o CloudWatch a cada minuto para cada banco de dados ativo. Analise as seguintes métricas do CloudWatch para o Amazon RDS para identificar padrões de CPU por longos períodos:

  • CPUUtilization
  • CPUCreditUsage, se você estiver usando uma instância T2 ou T3
  • CPUCreditBalance, se você estiver usando uma instância T2 ou T3

Além disso, revise as métricas a seguir para verificar se houve uma alteração de workload e se algum limite foi violado. Esses fatores podem contribuir para o aumento na utilização da CPU.

  • DatabaseConnections
  • DiskQueueDepth
  • FreeableMemory
  • ReadIOPS
  • ReadLatency
  • WriteIOPS
  • WriteLatency

Para obter mais informações, consulte Métricas do Amazon RDS e Visualizar as métricas da instância de banco de dados.

Métricas de monitoramento aprimoradas

O monitoramento aprimorado fornece métricas em tempo real para o sistema operacional no qual sua instância de banco de dados é executada. Enquanto o CloudWatch obtém as métricas de utilização da CPU do hipervisor, o Enhanced Monitoring obtém essas métricas de um agente na instância de banco de dados. As métricas de monitoramento aprimorado são mais detalhadas do que as métricas do CloudWatch. As métricas de monitoramento aprimoradas são armazenadas por 30 dias no CloudWatch Logs.

Você pode definir o intervalo de coleta para as métricas de 1 segundo a 1 minuto. É uma prática recomendada definir a granularidade para 1 segundo ou 5 segundos para aplicações críticas para os negócios. Com essa granularidade, as métricas fornecem informações mais precisas sobre a carga na aplicação para analisar problemas de performance.

Para exibir o período de tempo do pico na utilização da CPU, faça o seguinte:
  1. Abra o console do Amazon RDS.
  2. No painel de navegação, selecione Bancos de dados.
  3. Escolha o banco de dados que você deseja monitorar.
  4. Escolha a guia Monitoramento.
  5. Selecione Monitoramento aprimorado na lista suspensa Monitoramento.
  6. Na exibição Monitoramento aprimorado, se a instância for uma implantação Multi-AZ, selecione primário para exibir as métricas do sistema operacional da instância primária. Selecione secundário para exibir as métricas da réplica em espera.
  7. Selecione a data e a hora de início.
  8. No canto direito, selecione a duração. Você pode selecionar 5 minutos, 15 minutos, 30 minutos ou 1 hora.

O gráfico Total da CPU indica o período em que a utilização da CPU aumentou.

Os gráficos Load Avg 1 min, Load Avg 5 min e Load Avg 15 min mostram o número de processos que solicitam o tempo de CPU no último minuto, nos últimos cinco minutos e nos últimos 15 minutos, respectivamente. Se a média de carga for maior que o número de vCPUs, a instância pode estar enfrentando um gargalo de CPU.

Para exibir os processos do sistema operacional, selecione a lista de processos do SO do Monitoramento na lista suspensa. Em seguida, classifique a lista por valores de CPU% para identificar o processo que tem mais uso de CPU.

Exemplo:

NOME VIRT RES CPU% MEM% VMLIMIT
oracleORCL [27074]ᵗ 6,07 GiB 1.007,24 MB 44,72 12,78 Ilimitado
oracleORCL [27076]ᵗ 6,07 GiB 1.010,02 MB 44,64 12,82 Ilimitado

Para obter mais informações sobre as colunas no exemplo anterior, consulte Visualização de métricas do sistema operacional no console do RDS.

Depois de identificar o processo com a maior utilização da CPU, você pode executar a seguinte consulta para mapear o ID do processo para uma sessão no banco de dados:

SET LINESIZE 120;
SET PAGES 200;
COL OSUSER FOR a20;
COL USERNAME FOR a20;
COL MACHINE FOR a20;
SELECT a.sid, a.serial#, a.osuser, a.username, a.machine, a.sql_id, c.sql_text FROM v$session a, v$process b, v$sql c 
WHERE a.paddr=b.addr AND b.spid=&spid AND a.sql_id=c.sql_id(+);

Por padrão, todos os gráficos de Monitoramento aprimorado não são exibidos no painel Monitoramento aprimorado. Para obter uma visão de workload no momento do pico na utilização da CPU, ative gráficos adicionais fazendo o seguinte:

  1. Abra o console do Amazon RDS.
  2. No painel de navegação, selecione Bancos de dados.
  3. Escolha o banco de dados que você deseja monitorar.
  4. Escolha a guia Monitoramento.
  5. Selecione Monitoramento aprimorado na lista suspensa Monitoramento.
  6. Na exibição Monitoramento aprimorado, escolha Gerenciar gráficos.
  7. Selecione os gráficos que você deseja visualizar.
  8. Escolha Salvar.

Exemplos de gráficos que você pode optar por visualizar:

Memória

  • Gratuito
  • Em cache
  • Em buffer
  • Total
  • Sujo
  • Ativo
  • Slab

Observação: as métricas relacionadas às métricas são recuperadas do arquivo /proc/meminfo.

Trocar

  • Trocar
  • Gratuito

E/S de disco e E/S de dispositivos físicos

  • Ler ES/s
  • Gravar ES/s
  • Tamanho da fila Ave
  • Aguardar

CPU

  • Usuário
  • Total
  • Sistema
  • Esperar
  • Ocioso
  • Bom

Para obter a lista de métricas disponíveis, consulte Métricas para instâncias de banco de dados MariaDB, MySQL, Oracle e PostgreSQL.

Para obter mais informações sobre o Monitoramento aprimorado, consulte Monitoramento do sistema operacional usando o monitoramento aprimorado.

Para obter informações sobre o custo do monitoramento aprimorado, consulte Custo do monitoramento aprimorado.

Métricas de Performance Insights

Com o painel Performance Insights do Amazon RDS, você pode visualizar a carga do banco de dados e filtrar a carga por esperas, instruções SQL, hosts ou usuários.

  1. Abra o console do Amazon RDS.
  2. No painel de navegação, escolha Performance Insights.
  3. Escolha a instância de banco de dados que você deseja monitorar.
  4. Para Exibir passado, selecione a duração de sua escolha.
  5. No gráfico Carga do banco de dados, verifique a hora em que você teve um pico no uso da CPU.
  6. Escolha a guia Principais esperas.
    Observe os principais eventos de espera durante o período de tempo do pico.
  7. Escolha a guia SQL superior.
    Revise e otimize as instruções SQL que contribuíram para o pico.

Para obter informações sobre o custo do Insights de Performance, consulte preço do Performance Insights.

Oracle Statspack

O Statspack é uma ferramenta de relatório de performance que fornece as métricas de performance do banco de dados durante um período de tempo específico.

Para revisar a utilização da CPU da instância usando o Statspack, faça o seguinte:

  1. Gere um relatório statspack para o período em que você teve um problema.
  2. Revise e otimize as consultas que resultam em uma alta carga de CPU.
  3. Analise os principais eventos de espera.

Exemplo de extrato de um relatório do Statspack:

-> Total DB CPU (s):           3,345
-> Captured SQL accounts for   91.3% of Total DB CPU
-> SQL reported below exceeded  1.0% of Total DB CPU
    CPU                  CPU per            Elapsed                     Old
  Time (s)   Executions  Exec (s)  %Total   Time (s)    Buffer Gets  Hash Value
---------- ------------ ---------- ------ ---------- --------------- ----------
   3043.36      598,100       0.01   91.0    3356.81     994,096,212  219593194

Module: JDBC Thin Client
SELECT tt.ORDER_TOTAL, tt.SALES_REP_ID, tt.ORDER_DATE, customers.CUST_FIRST_NAME, customers.CUST_LAST_NAME FROM   
(SELECT orders.ORDER_TOTAL, orders.SALES_REP_ID, orders.ORDER_DATE, orders.customer_id, rank() Over (ORDER BY orders.O

Para obter mais informações, consulte a documentação da Oracle para o Oracle Statspack.

AWR

O AWR é uma ferramenta de relatório de performance da Oracle que fornece métricas de performance durante um período de tempo específico.

Observação: o AWR requer uma Licença do Diagnostic Pack e só está disponível para a Enterprise Edition da Oracle.

Para identificar a causa da carga da CPU usando o AWR, faça o seguinte:

1.    Execute uma consulta semelhante à seguinte para identificar o ID do snapshot inicial e final para o período de tempo de alta carga da CPU:

SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;

2.    Gere o relatório AWR.

3.    Baixe o relatório AWR.

4.    Revise e otimize as consultas listadas na seção SQL ordenada por Tempo de CPU do relatório AWR.

5.    Analise os principais eventos de espera.

No Oracle 12c e versões posteriores, os relatórios ADDM e ASH são incluídos no relatório AWR.

Observação: quando um relatório AWR é gerado para mais de quatro IDs de snapshot consecutivos, todos os relatórios ADDM e ASH não são incluídos. Para gerar esses relatórios adicionais, use as instruções nas seções a seguir.

ADDM

O ADDM é uma ferramenta de diagnóstico que analisa os dados AWR, identifica gargalos de performance e fornece recomendações.

Observação: o ADDM requer uma licença do Diagnostic Pack e só está disponível para a Enterprise Edition da Oracle.

1.    Execute uma consulta semelhante à seguinte para Identificar o ID do snapshot inicial e final para o período de tempo de alta carga da CPU:

SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;

2.    Gere o relatório ADDM.

3.    Baixe o relatório ADDM.

4.    Analise as recomendações no relatório ADDM.

ASH

ASH é uma ferramenta de diagnóstico que coleta informações de sessão ativas. Para solucionar problemas de performance transitórios usando ASH, faça o seguinte:

Observação: o ASH requer uma licença do Diagnostic Pack e só está disponível para a Enterprise Edition da Oracle.

1.    Gere um relatório ASH para o período de tempo em que houve uma alta carga de CPU.

2.    Baixe o relatório ASH.

3.    Revise a seção TOP SQL with TOP Events.

Para obter informações sobre como interpretar os relatórios AWR, ADDM e ASH, consulte a documentação do Oracle Support para Oracle Support Doc ID FAQ: Automatic Workload Repository (AWR) Reports (Doc ID 1599440.1).

Oracle SQLT

O Amazon RDS oferece suporte ao Oracle SQLTXPLAIN (SQLT) por meio do uso da opção SQLT. O SQLT é uma ferramenta usada para diagnosticar instruções SQL que não funcionam bem.

Para produzir um relatório para uma instrução SQL específica, consulte Oracle SQLT.

Se você receber o seguinte erro ao usar o SQLT:

Error: ORA-20106: SQLT parameter connect_identifier must be set when running SQLT from a remote client.

Execute um dos seguintes comandos antes de executar a extração:

EXEC sqltxadmin.sqlt$a.set_sess_param(‘connect_identifier’, ‘@SID’);
EXEC sqltxadmin.sqlt$a.set_param(‘connect_identifier’, ‘@example-hostname:example-port/example-sid’);