Come posso risolvere i problemi di utilizzo elevato della CPU nel mio database Amazon RDS per Oracle?

9 minuti di lettura
0

Sto riscontrando un elevato utilizzo della CPU sulla mia istanza Amazon Relational Database Service (Amazon RDS) per Oracle DB.

Breve descrizione

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

  • Metriche di Amazon CloudWatch
  • Metriche di monitoraggio migliorate
  • Metriche di Performance Insights
  • Pacchetto statistiche Oracle
  • Archivio automatico dei carichi di lavoro (AWR)
  • Monitor diagnostico automatico del database (ADDM)
  • Cronologia delle sessioni attive (ASH)
  • Oracle SQLT

Risoluzione

Durante la diagnosi dei problemi relativi all'elevato utilizzo della CPU, identifica il periodo di tempo in cui si è verificato il problema.

Metriche di CloudWatch

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

  • Utilizzo della CPU
  • CPUCreditUsage, se utilizzi un'istanza T2 o T3
  • CPUCreditBalance, se utilizzi un'istanza T2 o T3

Inoltre, esamina le seguenti metriche per verificare se c'è stata una modifica nel carico di lavoro e se sono state superate le soglie. Questi fattori potrebbero contribuire all'aumento dell'utilizzo della CPU.

  • Connessioni al database
  • Profondità della coda del disco
  • Memoria gratuita
  • Leggi IOPS
  • Latenza di lettura
  • Scrivi IOPS
  • Latenza di scrittura

Per ulteriori informazioni, consulta Monitoraggio dei parametri Amazon RDS con Amazon CloudWatch e Visualizzazione dello stato e dei consigli delle istanze.

Metriche di monitoraggio migliorate

Enhanced Monitoring fornisce metriche in tempo reale per il sistema operativo su cui viene eseguita l'istanza DB. Mentre CloudWatch ottiene i parametri di utilizzo della CPU dall'hypervisor, Enhanced Monitoring ottiene questi parametri da un agente sull'istanza database. Le metriche di monitoraggio avanzato sono più granulari rispetto alle metriche di CloudWatch. Le metriche di monitoraggio avanzate vengono archiviate per 30 giorni nei log di CloudWatch.

Puoi definire l'intervallo di raccolta per le metriche da 1 secondo a 1 minuto. È consigliabile impostare la granularità su 1 secondo o 5 secondi per le applicazioni aziendali critiche. Con questa granularità, le metriche 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, procedi come segue:

  1. Apri la console Amazon RDS.
  2. Nel riquadro di navigazione, scegli Database.
  3. Scegli il database che desideri monitorare.
  4. Scegli la scheda Monitoraggio.
  5. Seleziona Monitoraggio avanzato dall'elenco a discesa Monitoraggio.
  6. Nella sezione Monitoraggio avanzato, se l'istanza è una distribuzione Multi-AZ, seleziona primaria per visualizzare le metriche del sistema operativo dell'istanza principale. Seleziona secondario per visualizzare le metriche per la replica in standby.
  7. Seleziona la data e l'ora di inizio.
  8. Nell'angolo destro, seleziona la durata. È possibile selezionare 5 minuti, 15 minuti, 30 minuti o 1 ora.

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

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

Per visualizzare i processi del sistema operativo, selezionare l'elenco dei processi del sistema operativo dall'elenco a discesa Monitoraggio. Quindi, ordina l'elenco in base ai valori della CPU% per identificare il processo che utilizza maggiormente la CPU.

Esempio:

NOMEVIRTRESCPU%MEM%VMLIMIT
oracleORCL [27074]ᵗ6,07 GiB1.007,24 MB44,7212,78illimitato
oracleORCL [27076]ᵗ6,07 GiB1.010,02 MB44,6412.82illimitato

Per ulteriori informazioni sulle colonne dell'esempio precedente, vedere Visualizzazione delle metriche del sistema operativo nella console RDS.

Dopo aver identificato il processo con il maggior utilizzo della CPU, è possibile eseguire la seguente query per mappare l'ID del processo a una sessione nel 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 del Monitoraggio avanzato non sono visualizzati nella dashboard del Monitoraggio avanzato. Per avere una visione del carico di lavoro al momento del picco di utilizzo della CPU, attiva grafici aggiuntivi procedendo come segue:

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

Esempi di grafici che potresti scegliere di visualizzare:

Memoria

  • Libera
  • In cache
  • Tamponata
  • Totale
  • Sporca
  • Attiva
  • A lastre

Nota: Le metriche relative alle metriche vengono recuperate dal file /proc/meminfo.

Di scambio

  • Di scambio
  • Libera

I/O del disco e I/O del dispositivo fisico

  • Lettura IO/s
  • Scrittura IO/s
  • Dimensione media della coda
  • Attesa

CPU

  • Utente
  • Totale
  • Sistema
  • Attesa
  • Inattiva
  • Buona

Per l'elenco delle metriche disponibili, vedere Panoramica del monitoraggio avanzato.

Per ulteriori informazioni sul monitoraggio avanzato, vedere Monitoraggio delle metriche del sistema operativo con monitoraggio avanzato.

Per informazioni sul costo del monitoraggio avanzato, consulta la sezione Costo del monitoraggio avanzato.

Metriche di Performance Insights

Con la dashboard Amazon RDS Performance Insights puoi visualizzare il carico del database e filtrarlo per attese, istruzioni SQL, host o utenti.

  1. Apri la console Amazon RDS.
  2. Nel riquadro di navigazione, scegli Performance Insights.
  3. Scegli l'istanza database che desideri monitorare.
  4. Per Visualizza passato, seleziona la durata desiderata.
  5. Nel grafico del carico del database, controlla il momento in cui si è verificato un picco nell'utilizzo della CPU.
  6. Scegli la scheda Top waits.
    Nota i principali eventi di attesa durante il periodo di tempo del picco.
  7. Scegli la scheda Top SQL.
    Rivedi e ottimizza le istruzioni SQL che hanno contribuito al picco.

Per informazioni sul costo di Performance Insights, consulta i prezzi di Performance Insights.

Pacchetto statistiche Oracle

Statspack è uno strumento di reporting delle prestazioni che fornisce le metriche delle prestazioni del database in un periodo di tempo specifico.

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

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

Esempio di estratto da un rapporto 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, vedere la documentazione Oracle per Oracle Statspack.

AWR

AWR (sul sito Web di Oracle) è uno strumento di reporting delle prestazioni di Oracle che fornisce metriche delle prestazioni in un periodo di tempo specifico.

Nota: AWR richiede una licenza Diagnostic Pack ed è disponibile solo per l'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 dello snapshot iniziale e finale per il periodo di tempo di elevato carico della CPU:
SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;
  1. Genera il rapporto AWR.

  2. Scarica il rapporto AWR.

4.    Esamina e ottimizza le query elencate nella sezione SQL ordinate per tempo di CPU del report AWR.

  1. Esamina i principali eventi di attesa.

In Oracle 12c e versioni successive, i report ADDM e ASH sono inclusi nel rapporto 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 nelle sezioni seguenti.

ADDM

ADDM è uno strumento diagnostico che analizza i dati AWR, identifica i punti di bottiglia nelle prestazioni e fornisce raccomandazioni.

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

  1. Esegui una query simile alla seguente per identificare l'ID dello snapshot iniziale e finale per il periodo di tempo di elevato carico della CPU:
SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;
  1. Genera il rapporto ADDM.

  2. Scarica il rapporto ADDM.

  3. Rivedi i consigli nel rapporto ADDM.

ASH

ASH (sul sito Web di Oracle) è uno strumento diagnostico che raccoglie informazioni sulla sessione attiva. Per risolvere i problemi transitori di prestazioni utilizzando ASH, procedi come segue:

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

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

  2. Scarica il rapporto ASH.

3.    Consulta la sezione TOP SQL con TOP Eventi.

Per informazioni sull'interpretazione dei report AWR, ADDM e ASH, consulta la documentazione del supporto Oracle per le domande frequenti su Oracle Support Doc ID: Rapporti Automatic Workload Repository (AWR) (Doc ID 1599440.1).

Oracle SQLT

Amazon RDS supporta Oracle SQLTXPLAIN (SQLT) tramite l'uso dell'opzione SQLT. SQLT è uno strumento utilizzato per diagnosticare istruzioni SQL che non funzionano bene.

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

Se ricevi il seguente errore quando usi 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’);

Informazioni correlate

Panoramica delle metriche di monitoraggio in Amazon RDS

Generazione di report sulle prestazioni con Automatic Workload Repository (AWR)

Generazione di un report ADDM

Generazione di un rapporto ASH

Come posso controllare le statistiche sulle prestazioni su un'istanza database Amazon RDS su cui è in esecuzione Oracle?