In che modo posso risolvere i problemi relativi all'elevato utilizzo della CPU nel database Amazon RDS for Oracle?

Ultimo aggiornamento: 29-10-2021

Sto riscontrando un elevato utilizzo della CPU sul mio Amazon Relational Database Service (Amazon RDS) per l'istanza database Oracle.

Breve descrizione

Se il database RDS per Oracle mostra un elevato utilizzo della CPU, utilizza una combinazione dei seguenti strumenti per identificarne la causa:

  • Parametri di Amazon CloudWatch
  • Parametri di Enhanced Monitoring
  • Parametri di Performance Insights
  • Oracle Statspack
  • Automatic Workload Repository (AWR)
  • Automatic Database Diagnostic Monitor (ADDM)
  • Active Session History (ASH)
  • Oracle SQLT

Risoluzione

Quando si esegue la diagnosi dei problemi legati all'elevato utilizzo della CPU, identifica per prima cosa il periodo di tempo in cui si è verificato il problema.

Parametri di CloudWatch

Amazon RDS invia parametri a CloudWatch ogni minuto per ogni database attivo. Esamina i seguenti parametri CloudWatch per Amazon RDS per identificare i modelli di CPU per lunghi periodi:

  • CPUUtilization
  • CPUCreditUsage, se stai utilizzando un'istanza T2 o T3
  • CPUCreditBalance, se stai utilizzando un'istanza T2 o T3

Inoltre, rivedi i seguenti parametri per verificare se si è verificato un cambiamento nel carico di lavoro e se sono state superate eventuali soglie. Questi fattori potrebbero contribuire al picco di utilizzo della CPU.

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

Per ulteriori informazioni, consulta Parametri di Amazon RDS e Visualizzazione dei parametri delle istanze database.

Parametri di Enhanced Monitoring

Enhanced Monitoring fornisce parametri in tempo reale per il sistema operativo (SO) su cui viene eseguita l'istanza database. Mentre CloudWatch ottiene i parametri di utilizzo della CPU dall'hypervisor, Enhanced Monitoring ottiene questi parametri da un agente nell'istanza database. I parametri di Enhanced Monitoring sono più granulari rispetto ai parametri di CloudWatch. I parametri di Enhanced Monitoring vengono archiviati per 30 giorni in CloudWatch Logs.

È possibile definire l'intervallo di raccolta per i parametri da 1 secondo a 1 minuto. Una best practice consiste nell’impostare la granularità su 1 secondo o 5 secondi per le applicazioni business-critical. Grazie a questa granularità, i parametri forniscono informazioni più accurate sul carico sull'applicazione per l'analisi dei problemi di prestazioni.

Per visualizzare il periodo di tempo del picco nell'utilizzo della CPU, completa le seguenti operazioni:
  1. Apri la console Amazon RDS.
  2. Nel pannello di navigazione, scegli Database.
  3. Seleziona il database che desideri monitorare.
  4. Seleziona la scheda Monitoraggio.
  5. Seleziona Enhanced Monitoring dall'elenco a discesa Monitoraggio.
  6. Nella vista Enhanced Monitoring, se l'istanza è una implementazione Multi-AZ, seleziona primario per visualizzare i parametri del sistema operativo dell'istanza primaria. Seleziona secondario per visualizzare i parametri per la replica in standby.
  7. Seleziona la data e l'ora di inizio.
  8. Nell'angolo destro, seleziona la durata. Puoi selezionare 5 minuti, 15 minuti, 30 minuti o 1 ora.

Il grafico Totale CPU indica il periodo di tempo in cui è aumentato l'utilizzo della CPU.

I grafici Load Avg 1 min, Load Avg 5 min e Load Avg 15 min mostrano il numero di processi che richiedono il tempo della CPU rispettivamente nell'ultimo minuto, negli ultimi cinque minuti e negli ultimi 15 minuti. Se la media del carico è maggiore del numero di vCPU, l'istanza potrebbe riscontrare un collo di bottiglia della CPU.

Per visualizzare i processi del sistema operativo, seleziona Elenco dei processi del sistema operativo dall'elenco a discesa Monitoraggio. Quindi, ordina l'elenco in base ai valori CPU% per identificare il processo che ha il maggior utilizzo della CPU.

Esempio:

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

Per ulteriori informazioni sulle colonne dell'esempio precedente, consulta Visualizzazione dei parametri del sistema operativo nella console RDS.

Dopo aver identificato il processo con il maggior utilizzo della CPU, è possibile eseguire la query riportata per mappare l'ID del processo a una sessione sul database:

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(+);

Per impostazione predefinita, tutti i grafici di Enhanced Monitoring non vengono visualizzati nel pannello di controllo di Enhanced Monitoring. Per avere una visione del carico di lavoro al momento del picco di utilizzo della CPU, attiva grafici aggiuntivi completando le seguenti operazioni:

  1. Apri la console Amazon RDS.
  2. Nel pannello di navigazione, scegli Database.
  3. Seleziona il database che desideri monitorare.
  4. Seleziona la scheda Monitoraggio.
  5. Seleziona Enhanced Monitoring dall'elenco a discesa Monitoraggio.
  6. Nella vista Enhanced Monitoring, scegli Gestisci grafici.
  7. Seleziona i grafici che desideri visualizzare.
  8. Scegli Salva.

Esempi di grafici che potresti scegliere di visualizzare:

Memory

  • Free
  • Cached
  • Buffered
  • Totale
  • Dirty
  • Active
  • Slab

Nota: i parametri correlati ai parametri sono recuperati dal file /proc/meminfo.

Swap

  • Swap
  • Free

I/O su disco e I/O dei dispositivi fisici

  • I/O di lettura al secondo
  • I/O di scrittura al secondo
  • Dimensione media coda
  • Attesa

CPU

  • Utente
  • Totale
  • Sistema
  • Attendi
  • Inattivo
  • Bene

Per l'elenco dei parametri disponibili, consulta Parametri per le istanze database MariaDB, MySQL, Oracle e PostgreSQL.

Per ulteriori informazioni su Enhanced Monitoring, consulta Monitoraggio del sistema operativo tramite Enhanced Monitoring.

Per informazioni sui costi di Enhanced Monitoring, consulta Costi di Enhanced Monitoring.

Parametri di Performance Insights

Con il pannello di controllo Performance Insights di Amazon RDS, puoi visualizzare il carico del database e filtrare il carico per attese, istruzioni SQL, host o utenti.

  1. Apri la console Amazon RDS.
  2. Nel pannello di navigazione, scegli Performance Insights.
  3. Seleziona l'istanza database che desideri monitorare.
  4. Per Visualizza passato, seleziona la durata che preferisci.
  5. Nel grafico Caricamento del database, controlla l'ora in cui si è verificato un picco nell'utilizzo della CPU.
  6. Scegli la scheda Attese superiori.
    Prendi nota dei principali eventi di attesa durante il periodo di tempo del picco.
  7. Scegli la scheda Prime istruzioni SQL.
    Esamina e ottimizza le istruzioni SQL che hanno contribuito al picco.

Per informazioni sul costo di Performance Insights, consulta Prezzi di Performance Insights.

Oracle Statspack

Statspack è uno strumento di report delle prestazioni che fornisce i parametri delle prestazioni del database in un periodo di tempo specifico.

Per rivedere l'utilizzo della CPU della tua istanza utilizzando Statspack, procedi come segue:

  1. Genera un report statspack per il periodo di tempo in cui si è verificato un problema.
  2. Esamina e ottimizza le query che comportano un elevato carico della CPU.
  3. Rivedi i principali eventi di attesa.

Estratto di esempio da un report 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

Per ulteriori informazioni, consulta la documentazione Oracle per Oracle Statspack.

AWR

AWR è uno strumento di report delle prestazioni Oracle che fornisce parametri delle prestazioni in un periodo di tempo specifico.

Nota: AWR richiede una licenza di Diagnostic Pack ed è disponibile solo per la Enterprise Edition di Oracle.

Per identificare la causa del carico della CPU utilizzando AWR, procedi come segue:

1.    Esegui una query simile alla seguente per identificare l'ID snapshot iniziale e finale per il periodo di tempo di carico elevato della CPU:

SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;

2.    Genera il report AWR.

3.    Scarica il report AWR.

4.    Rivedi e ottimizza le query elencate nella sezione SQL ordinata per tempo CPU del report AWR.

5.    Rivedi i principali eventi di attesa.

In Oracle 12c e versioni successive, i report ADDM e ASH sono inclusi nel report AWR.

Nota: quando viene generato un report AWR per più di quattro ID snapshot consecutivi, tutti i report ADDM e ASH non vengono inclusi. Per generare questi report aggiuntivi, utilizza le istruzioni riportate nelle sezioni seguenti.

ADDM

ADDM è uno strumento diagnostico che analizza i dati AWR, identifica i colli di bottiglia delle prestazioni e fornisce suggerimenti.

Nota: ADDM richiede una licenza di Diagnostic Pack ed è disponibile solo per la Enterprise Edition di Oracle.

1.    Esegui una query simile alla seguente per identificare l'ID snapshot iniziale e finale per il periodo di tempo di carico elevato della CPU:

SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;

2.    Genera il report ADDM.

3.    Scarica il report ADDM.

4.    Esamina i suggerimenti contenuti nel report ADDM.

ASH

ASH è uno strumento diagnostico che raccoglie informazioni sulla sessione attiva. Per risolvere i problemi di prestazioni temporanei tramite ASH, completa le seguenti operazioni:

Nota: ASH richiede una licenza di Diagnostic Pack ed è disponibile solo per la Enterprise Edition di Oracle.

1.    Genera un report ASH per il periodo di tempo in cui si è verificato un carico elevato della CPU.

2.    Scarica il report ASH.

3.    Esamina la sezione SQL principali con eventi principali.

Per informazioni sull'interpretazione dei report AWR, ADDM e ASH, consulta la documentazione di Oracle Support per Oracle Support Doc ID FAQ: Rapporti AWR (Automatic Workload Repository) (ID documento 1599440.1).

Oracle SQLT

Amazon RDS for Oracle ora supporta Oracle SQLTXPLAIN (SQLT) attraverso l'utilizzo dell'opzione SQLT. SQLT è uno strumento utilizzato per eseguire la diagnosi delle istruzioni SQL che non funzionano correttamente.

Per produrre un report per un'istruzione SQL specifica, consulta Oracle SQLT.

Se viene visualizzato il seguente errore durante l'utilizzo di SQLT:

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

Esegui uno dei seguenti comandi prima di eseguire l'estrazione:

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