Como soluciono problemas de alta utilização da CPU no meu banco de dados Amazon RDS para Oracle?

10 minuto de leitura
0

Estou experimentando uma alta utilização da CPU em minha instância de banco de dados Amazon Relational Database Service (Amazon RDS) para Oracle.

Breve descrição

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

  • Métricas do Amazon CloudWatch
  • Métricas de Monitoramento Avançado
  • Métricas do Performance Insights
  • Oracle Statspack
  • Repositório Automático de Workload (AWR)
  • Monitor Automático de Diagnóstico de Banco de Dados (ADDM)
  • Histórico de Sessões Ativas (ASH)
  • Oracle SQLT

Resolução

Ao diagnosticar problemas relacionados à alta utilização da CPU, identifique o período 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:

  • Utilização da CPU
  • Uso de crédito da CPU, se você estiver usando uma instância T2 ou T3
  • Saldo de crédito da CPU, 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 na workload e se algum limite foi violado. Esses fatores podem contribuir para o aumento na utilização da CPU.

  • Conexões de banco de dados
  • DiskQueueDepth
  • FreeableMemory
  • ReadIOPS
  • ReadLatency
  • WriteIOPS
  • WriteLatency

Para mais informações, consulte Monitoring Amazon RDS metrics with Amazon CloudWatch (Monitoramento de métricas do Amazon RDS com o Amazon CloudWatch) e Viewing instance status and recommendations (Visualização do status e das recomendações da instância).

Métricas de Monitoramento Avançado

O Monitoramento Avançado fornece métricas em tempo real para o sistema operacional em que 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 atendente na instância de banco de dados. As métricas de Monitoramento Avançado são mais granulares do que as métricas do CloudWatch. As métricas de monitoramento avançado são armazenadas por 30 dias no CloudWatch Logs.

Você pode definir o intervalo de coleta das métricas de um segundo a um minuto. É uma prática recomendada definir a granularidade para um segundo ou cinco segundos para aplicações essenciais aos negócios. Com essa granularidade, as métricas fornecem informações mais precisas sobre a carga na aplicação para analisar problemas de desempenho.

Para ver 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, escolha Bancos de dados.
  3. Escolha o banco de dados que você deseja monitorar.
  4. Escolha a guia Monitoramento.
  5. Selecione Monitoramento Avançado na lista suspensa Monitoramento.
  6. Na exibição de Monitoramento Avançado, se a instância for uma implantação Multi-AZ, selecione primária para ver as métricas do sistema operacional da instância primária. Selecione secundária para ver 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 de Carga Média de 1 min, Carga Média de 5 min e Carga Média de 15 min mostram o número de processos que solicitaram 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 visualizar os processos do sistema operacional, selecione Lista de processos do sistema operacional na lista suspensa Monitoramento. Em seguida, classifique a lista por valores de % de CPU para identificar o processo que tem o maior uso da CPU.

Exemplo:

NAMEVIRTRESCPU%MEM%VMLIMIT
OracleORCL [27074]ᵗ6,07 GiB1.007,24 MB44,7212,78ilimitado
OracleORCL [27076]ᵗ6,07 GiB1.010,02 MB44,6412,82ilimitado

Para mais informações sobre as colunas do 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 Avançado não são exibidos no painel de Monitoramento Avançado. Para ter uma visão da workload no momento do aumento 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, escolha Bancos de dados.
  3. Escolha o banco de dados que você deseja monitorar.
  4. Escolha a guia Monitoramento.
  5. Selecione Monitoramento Avançado na lista suspensa Monitoramento.
  6. Na exibição de Monitoramento Avançado, escolha Gerenciar gráficos.
  7. Selecione os gráficos que você deseja visualizar.
  8. Escolha Save (Salvar).

Exemplos de gráficos que você pode escolher visualizar:

Memória

  • Gratuito
  • Em cache
  • Armazenado em buffer
  • Total
  • Sujo
  • Ativo
  • Pizza

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 dispositivo físico

  • Leia ES/s
  • ES/s de gravação
  • Tamanho da fila Ave
  • Aguarde

CPU

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

Para ver a lista de métricas disponíveis, consulte Visão geral do Monitoramento Avançado.

Para mais informações sobre Monitoramento Avançado, consulte Monitoramento de métricas do sistema operacional com Monitoramento Avançado.

Para obter informações sobre o custo do Monitoramento Avançado, consulte Custo do Monitoramento Avançado.

Métricas do Performance Insights

Com o painel do Amazon RDS Performance Insights, 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. Em Exibir passado, selecione a duração de sua escolha.
  5. No gráfico de Carga do Banco de Dados, verifique a hora em que ocorreu um pico no uso da CPU.
  6. Escolha a guia Maiores esperas.
    Observe os principais eventos de espera durante o período do pico.
  7. Escolha a guia **Top SQL **.
    Analise e otimize as instruções SQL que contribuíram para o pico.

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

Oracle Statspack

Statspack é uma ferramenta de relatório de desempenho que fornece as métricas de desempenho do seu banco de dados em um período específico.

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

  1. Gere um relatório de statspack para o período em que você teve um problema.
  2. Analise 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 mais informações, consulte a documentação da Oracle para o Oracle Statspack.

AWR

AWR (no site da Oracle) é uma ferramenta de relatório de desempenho da Oracle que fornece métricas de desempenho em um período específico.

Observação: a AWR exige uma licença de pacote de diagnóstico e está disponível somente para a Enterprise Edition do Oracle.

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

1.    Execute uma consulta semelhante à seguinte para identificar a ID inicial e final do snapshot para o período 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.

  1. Analise e otimize as consultas listadas na seção SQL ordenado 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 estão incluídos no relatório AWR.

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

ADDM

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

Observação: a ADDM exige uma licença do Diagnostic Pack e está disponível somente para a Enterprise Edition do Oracle.

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

SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;
  1. Gere o relatório ADDM.

3.    Faça o download do relatório ADDM.

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

ASH

ASH (no site da Oracle) é uma ferramenta de diagnóstico que coleta informações da sessão ativa. Para solucionar problemas transitórios de desempenho usando ASH, faça o seguinte:

Observação: A ASH exige uma licença do Diagnostic Pack e está disponível somente para a Enterprise Edition do Oracle.

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

2.    Faça o download do relatório ASH.

3.    Consulte a seção TOP SQL com TOP Events.

Para informações sobre a interpretação dos relatórios AWR, ADDM e ASH, consulte a documentação de suporte da Oracle para perguntas frequentes sobre o Oracle Support Doc ID: Relatórios do Repositório Automático de Workload (AWR) (ID do documento nº 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 comandos a seguir 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’);

Informações relacionadas

Visão geral das métricas de monitoramento no Amazon RDS

Geração de relatórios de desempenho com o Repositório Automático de Workload (AWR)

Gerando um relatório ADDM

Gerando um relatório ASH

Como faço para verificar as estatísticas de desempenho em uma instância de banco de dados Amazon RDS que está executando o Oracle?