Salta al contenuto

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

8 minuti di lettura
0

La mia istanza database Amazon Relational Database Service (Amazon RDS) per Oracle ha un tasso di utilizzo elevato della CPU.

Risoluzione

Quando diagnostichi problemi legati all'utilizzo elevato della CPU, identifica il periodo di tempo in cui si è verificato il problema.

Metriche di CloudWatch

Amazon RDS invia metriche ad Amazon 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:

  • CPUUtilization
  • CPUCreditUsage, se usi 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:

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

Nota: questi fattori possono contribuire all'aumento dell'utilizzo della CPU.

Per ulteriori informazioni, consulta Visualizzazione dello stato dell'istanza.

Metriche di Monitoraggio avanzato

Monitoraggio avanzato fornisce metriche in tempo reale per il sistema operativo su cui viene eseguita l'istanza database.

Per visualizzare il periodo di tempo del picco nell'utilizzo della CPU, procedi come segue:

  1. Apri la console Amazon Aurora e RDS.
  2. Nel pannello di navigazione, scegli Database.
  3. Scegli il database che desideri monitorare.
  4. Scegli la scheda Monitoraggio.
  5. Seleziona Monitoraggio avanzato nell'elenco a discesa Monitoraggio.
  6. Nella sezione Monitoraggio avanzato, se l'istanza è un'implementazione multi-AZ, seleziona primaria per visualizzare le metriche del sistema operativo dell'istanza primaria. Seleziona secondaria per visualizzare le metriche per la replica in standby.
  7. Seleziona la data e l'ora di inizio.
  8. Nell'angolo destro della pagina, seleziona la durata. Puoi 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 ( Carico medio 1 minuto), Load Avg 5 min (Carico medio 5 minuti ) e Load Avg 15 min (Carico medio 15 minuti) mostrano il numero di processi che richiedevano tempo CPU. Il tempo CPU viene calcolato nell'ultimo minuto. I grafici mostrano anche gli ultimi cinque minuti e gli ultimi 15 minuti. Se il carico medio è superiore al numero di vCPU, l'istanza potrebbe presentare un collo di bottiglia della CPU.

Per visualizzare i processi del sistema operativo, seleziona Elenco dei processi del sistema operativo nell'elenco a discesa Monitoraggio. Quindi ordina l'elenco in base ai valori della CPU% per identificare il processo che la utilizza maggiormente. Per ulteriori informazioni, consulta Visualizzazione delle metriche nella console RDS.

Dopo aver identificato il processo che utilizza maggiormente la CPU, esegui questa query per mappare l'ID del processo in una sessione del 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 Monitoraggio avanzato non sono visualizzati nella dashboard 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 Aurora e RDS.
  2. Nel pannello di navigazione, scegli Database.
  3. Scegli il database che desideri monitorare.
  4. Scegli la scheda Monitoraggio.
  5. Seleziona Monitoraggio avanzato nell'elenco a discesa Monitoraggio.
  6. Nella sezione Monitoraggio avanzato, scegli Gestisci grafici.
  7. Seleziona i grafici che desideri visualizzare.
  8. Scegli Salva.

Puoi scegliere di visualizzare i seguenti esempi di grafico:

Memoria

  • Memoria libera
  • Memoria cache
  • Memoria bufferizzata
  • Memoria totale
  • Memoria sporca
  • Memoria attiva
  • Memoria slab

Nota: le metriche relative alla memoria vengono recuperate dal file /proc/meminfo.

Swap

  • Swap
  • Swap gratuito

Slab Memory

  • IO/s di lettura
  • IO/s di scrittura
  • Dimensione media della coda
  • Attesa

CPU

  • CPU utente
  • CPU totale
  • CPU sistema
  • CPU attesa
  • CPU inattiva
  • CPU nice

Per l'elenco delle metriche disponibili, consulta Panoramica di Monitoraggio avanzato.

Per ulteriori informazioni su Monitoraggio avanzato, consulta Monitoraggio delle metriche del sistema operativo con Monitoraggio avanzato.

Per informazioni sul costo di Monitoraggio avanzato, consulta Costo di Monitoraggio avanzato.

Metriche di Amazon RDS Performance Insights

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

Per visualizzare le metriche di Performance Insights, completa i seguenti passaggi:

  1. Apri la console Aurora e RDS.
  2. Nel pannello di navigazione scegli Performance Insights.
  3. Scegli l'istanza database che desideri monitorare.
  4. Per impostazione predefinita, nella dashboard Performance Insights vengono visualizzate le statistiche dell'ultima ora. Per il periodo di tempo che analizzi, scegli Relativo o Assoluto.
  5. Nel grafico Carico del database, controlla il momento in cui si è verificato un picco nell'utilizzo della CPU.
  6. Scegli la scheda Attese principali.
    Nota: controlla i principali eventi di attesa durante il periodo del picco.
  7. Scegli la scheda Top SQL.
  8. Rivedi e ottimizza le istruzioni SQL che hanno contribuito al picco.

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

Statspack

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

Per esaminare l'utilizzo della CPU dell'istanza utilizzando Statspack, completa i seguenti passaggi:

  1. Genera un report 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. Analizza i principali eventi di attesa.

Esempio di estratto di 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 Oracle Statspack sul sito web Oracle.

AWR

Automatic Workload Repository è uno strumento di reporting delle prestazioni di Oracle che fornisce metriche delle prestazioni per un periodo di tempo specifico. Per ulteriori informazioni, consulta Automatic Workload Repository sul sito web Oracle.

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

Per identificare la causa del carico della CPU utilizzando AWR, completa i seguenti passaggi:

  1. Per identificare l'ID di inizio e fine dello snapshot per il periodo di tempo di carico elevato della CPU, esegui una query simile a questa:

    SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;
  2. Genera il report AWR.

  3. Scarica il report AWR.

  4. Esamina e ottimizza le query riportate nella sezione SQL ordered by CPU Time (SQL per tempo CPU) del report AWR.

  5. Analizza i principali eventi di attesa.

In Oracle 12c e versioni successive, nel report AWS sono inclusi i report Automatic Database Diagnostic Monitor (ADDM) e Active Session History (ASH).

Nota: un report AWR generato per più di quattro ID di snapshot consecutivi non include tutti i report ADDM e ASH.

ADDM

Automatic Database Diagnostic Monitor è uno strumento diagnostico che analizza i dati AWR, identifica i colli di bottiglia nelle prestazioni e fornisce consigli.

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

Per analizzare i dati AWR utilizzando ADDM, completa i seguenti passaggi:

  1. Per identificare l'ID di inizio e fine dello snapshot per il periodo di tempo di carico elevato della CPU, esegui questo esempio di query:

    SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;
  2. Genera il report ADDM.

  3. Scarica il report ADDM.

  4. Rivedi i consigli nel report ADDM.

Per informazioni sui report ADDM, consulta FAQ: Automatic Workload Repository (AWR) Reports (Doc ID 1599440.1) (Domande frequenti: Report Automatic Workload Repository (AWR) (ID documento 1599440.1) sul sito web Oracle.

ASH

Active Session History è uno strumento di diagnostica che raccoglie informazioni sulla sessione attiva. Per risolvere problemi di prestazioni temporanei utilizzando ASH, completa i seguenti passaggi:

  1. Genera un report ASH per il periodo di tempo in cui si è verificato un carico elevato della CPU.
    Nota: ASH richiede una licenza Diagnostic Pack ed è disponibile solo per l'edizione Enterprise di Oracle.
  2. Scarica il report ASH.
  3. Esamina la sezione TOP SQL with TOP Events (TOP SQL con eventi principali).

Per informazioni sui report ASH, consulta Analyzing Sampled Data (Analisi dei dati campionati) sul sito web Oracle.

Oracle SQLT

Amazon RDS supporta Oracle SQLTXPLAIN (SQLT) tramite l'uso dell'opzione SQLT. SQLT è uno strumento utilizzato per diagnosticare le istruzioni SQL con prestazioni insufficienti.

Per creare un report per un'istruzione SQL specifica, consulta Oracle SQLT sul sito web Oracle.

Potresti ricevere il seguente errore quando utilizzi SQLT:

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

In tal caso, esegui uno di questi 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

Strumenti di monitoraggio di Amazon RDS

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

How do I check the performance statistics of an Amazon RDS DB instance that is running Oracle? (Come posso controllare le statistiche relative alle prestazioni di un'istanza database Amazon RDS su cui è in esecuzione Oracle?)