Wie behebe ich eine hohe CPU-Auslastung in meiner Amazon RDS for Oracle Database?

Letzte Aktualisierung: 29.10.2021

Ich erlebe eine hohe CPU-Auslastung auf meiner DB-Instance beim Amazon Relational Database Service (Amazon RDS) for Oracle.

Kurzbeschreibung

Wenn Ihre RDS-for-Oracle-Datenbank eine hohe CPU-Auslastung aufweist, verwenden Sie eine Kombination der folgenden Tools, um die Ursache zu ermitteln:

  • Amazon-CloudWatch-Metriken
  • Enhanced-Monitoring-Metriken
  • Performance-Insights-Metriken
  • Oracle-Statspack
  • Automatisches Workload-Repositorium (AWR)
  • Automatischer Datenbankdiagnosemonitor (ADDM)
  • Aktiver Sitzungsverlauf (ASH)
  • Oracle SQLT

Auflösung

Identifizieren Sie bei der Diagnose von Problemen im Zusammenhang mit hoher CPU-Auslastung den Zeitraum, in dem das Problem aufgetreten ist.

CloudWatch-Metriken

Amazon RDS sendet jede Minute Metriken für jede aktive Datenbank an CloudWatch. Überprüfen Sie die folgenden CloudWatch-Metriken für Amazon RDS, um CPU-Muster über längere Zeiträume zu identifizieren:

  • CPUUtilization
  • CpuCreditUsage, wenn Sie eine T2- oder T3-Instance verwenden
  • CpuCreditBalance, wenn Sie eine T2- oder T3-Instance verwenden

Überprüfen Sie außerdem die folgenden Metriken, um zu sehen, ob sich die Workload geändert hat und Schwellenwerte überschritten wurden. Diese Faktoren können zum Anstieg der CPU-Auslastung beitragen.

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

Weitere Informationen finden Sie unter Amazon-RDS-Metriken und Anzeigen der DB-Instance-Metriken.

Enhanced-Monitoring-Metriken

Enhanced Monitoring bietet Echtzeit-Metriken für das Betriebssystem, auf dem Ihre DB-Instance ausgeführt wird. Während CloudWatch die CPU-Auslastungsmetriken vom Hypervisor erhält, ruft Enhanced Monitoring diese Metriken von einem Agenten auf der DB-Instance ab. Enhanced-Monitoring-Metriken sind detaillierter als die CloudWatch-Metriken. Enhanced-Monitoring-Metriken werden 30 Tage lang in CloudWatch Logs gespeichert.

Sie können das Erfassungsintervall für die Metriken von 1 Sekunde bis 1 Minute definieren. Es ist eine bewährte Methode, die Granularität für geschäftskritische Anwendungen auf 1 Sekunde oder 5 Sekunden einzustellen. Mit dieser Granularität liefern die Metriken genauere Informationen über die Belastung der Anwendung zur Analyse von Leistungsproblemen.

Gehen Sie wie folgt vor, um den Zeitraum des Anstiegs der CPU-Auslastung anzuzeigen:
  1. Öffnen Sie die Amazon-RDS-Konsole.
  2. Wählen Sie im Navigationsbereich Datenbanken aus.
  3. Wählen Sie die Datenbank aus, die Sie überwachen möchten.
  4. Wählen Sie die Registerkarte Überwachung.
  5. Wählen Sie Enhanced Monitoring in der Dropdown-Liste Überwachung aus.
  6. Wenn es sich bei der Instance um eine Multi-AZ-Bereitstellung handelt, wählen Sie in der Ansicht Enhanced Monitoring Primär aus, um die Betriebssystem-Metriken der primären Instance anzuzeigen. Wählen Sie Sekundär aus, um die Metriken für das Standby-Replikat anzuzeigen.
  7. Wählen Sie das Datum und die Startzeit aus.
  8. Wählen Sie in der rechten Ecke die Dauer aus. Sie können 5 Minuten, 15 Minuten, 30 Minuten oder 1 Stunde wählen.

Das Diagramm CPU-Gesamtzahl zeigt den Zeitraum an, in dem die CPU-Auslastung gestiegen ist.

Die Diagramme Load Avg 1 min, Load Avg 5 min und Load Avg 15 min zeigen die Anzahl der Prozesse, welche die CPU-Zeit in der letzten Minute, den letzten fünf Minuten bzw. den letzten 15 Minuten anfordert haben. Wenn der Lastdurchschnitt größer ist als die Anzahl der vCPUs, liegt möglicherweise ein CPU-Engpass bei der Instance vor.

Um die Betriebssystemprozesse anzuzeigen, wählen Sie Betriebssystemprozessliste aus der Dropdown-Liste Überwachung aus. Sortieren Sie dann die Liste nach CPU%-Werten, um den Prozess zu identifizieren, der die meiste CPU-Auslastung aufweist.

Beispiel:

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

Weitere Informationen zu den Spalten im vorangegangenen Beispiel finden Sie unter Anzeigen von Betriebssystem-Metriken in der RDS-Konsole.

Nachdem Sie den Prozess mit der höchsten CPU-Auslastung identifiziert haben, können Sie die folgende Abfrage ausführen, um die Prozess-ID einer Sitzung in der Datenbank zuzuordnen:

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

Standardmäßig werden nicht alle Diagramme zur erweiterten Überwachung im Dashboard für erweiterte Überwachung angezeigt. Um einen Überblick über die Workload zum Zeitpunkt der Spitze der CPU-Auslastung zu erhalten, schalten Sie zusätzliche Diagramme wie folgt ein:

  1. Öffnen Sie die Amazon-RDS-Konsole.
  2. Wählen Sie im Navigationsbereich Datenbanken aus.
  3. Wählen Sie die Datenbank aus, die Sie überwachen möchten.
  4. Wählen Sie die Registerkarte Überwachung.
  5. Wählen Sie Enhanced Monitoring in der Dropdown-Liste Überwachung aus.
  6. Wählen Sie in der Ansicht Enhanced Monitoring Diagramme verwalten aus.
  7. Wählen Sie die Diagramme aus, die Sie anzeigen möchten.
  8. Wählen Sie Speichern aus.

Beispiele für Diagramme, die Sie möglicherweise anzeigen möchten:

Arbeitsspeicher

  • Frei
  • Zwischengespeichert
  • Gepuffert
  • Gesamt
  • Dreckig
  • Aktiv
  • Platte

Hinweis: Metriken in Bezug auf Metriken werden aus der Datei /proc/meminfo abgerufen.

Tauschen

  • Tauschen
  • Frei

Disk I/O und Physical Device I/O

  • Lesen Sie IO/s
  • Schreiben IO/s
  • Durchschnittliche Warteschlangengröße
  • Warte

CPU

  • Benutzer
  • Gesamt
  • System
  • Wartezeit
  • Leerlauf
  • Sehr gut

Die Liste der verfügbaren Metriken finden Sie unter Metriken für MariaDB-, MySQL-, Oracle- und PostgreSQL-DB-Instances.

Weitere Informationen zu Enhanced Monitoring finden Sie unter Überwachung des Betriebssystems mithilfe von Enhanced Monitoring.

Informationen zu den Kosten von Enhanced Monitoring, finden Sie unter Kosten von Enhanced Monitoring.

Performance-Insights-Metriken

Mit dem Dashboard Amazon-RDS-Performance-Insights können Sie die Datenbankauslastung visualisieren und die Auslastung nach Wartezeiten, SQL-Anweisungen, Hosts oder Benutzern filtern.

  1. Öffnen Sie die Amazon-RDS-Konsole.
  2. Wählen Sie im Navigationsbereich Performance Insights aus.
  3. Wählen Sie die DB-Instance aus, die Sie überwachen möchten.
  4. Wählen Sie für Vergangenheit anzeigen die gewünschte Dauer aus.
  5. Überprüfen Sie im Diagramm Datenbanklast die Zeit, zu der Sie einen Anstieg der CPU-Auslastung festgestellt haben.
  6. Wählen Sie die Registerkarte Top-Wartezeiten aus.
    Beachten Sie die Top-Wartezeit-Ereignisse während des Zeitraums des Anstiegs.
  7. Wählen Sie die Registerkarte Top-SQL aus.
    Überprüfen und optimieren Sie die SQL-Anweisungen, die zum Anstieg beigetragen haben.

Informationen zu den Kosten von Performance Insights finden Sie unter Performance-Insights-Preise.

Oracle-Statspack

Statspack ist ein Performance-Reporting-Tool, das die Performance-Metriken Ihrer Datenbank über einen bestimmten Zeitraum bereitstellt.

Gehen Sie wie folgt vor, um die CPU-Auslastung Ihrer Instance mithilfe von Statspack zu überprüfen:

  1. Generieren Sie einen Statspack-Bericht für den Zeitraum, in dem ein Problem aufgetreten ist.
  2. Überprüfen und optimieren Sie die Abfragen, die zu einer hohen CPU-Last führen.
  3. Überprüfen Sie die Top-Wartezeit-Ereignisse.

Beispielauszug aus einem Statspack-Bericht:

-> 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

Weitere Informationen finden Sie in der Oracle-Dokumentation für Oracle Statspack.

AWR

AWR ist ein Oracle Performance-Reporting-Tool, das Performance-Metriken über einen bestimmten Zeitraum bereitstellt.

Hinweis: AWR erfordert eine Diagnostic-Pack-Lizenz und ist nur für die Enterprise Edition von Oracle verfügbar.

Gehen Sie wie folgt vor, um die Ursache für Ihre CPU-Last mithilfe von AWR zu ermitteln:

1.    Führen Sie eine Abfrage ähnlich der folgenden aus, um die Start- und End-Snapshot-ID für den Zeitraum hoher CPU-Last zu ermitteln:

SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;

2.    Generieren Sie den AWR-Bericht.

3.    Laden Sie den AWR-Bericht herunter.

4.    Überprüfen und optimieren Sie die Abfragen, die im Abschnitt SQL sortiert nach CPU-Zeit des AWR-Berichts aufgeführt sind.

5.    Überprüfen Sie die Top-Wartezeit-Ereignisse.

In Oracle 12c und späteren Versionen sind ADDM- und ASH-Berichte im AWR-Bericht enthalten.

Hinweis: Wenn ein AWR-Bericht für mehr als vier aufeinanderfolgende Snapshot-IDs generiert wird, sind sämtliche ADDM- und ASH-Berichte nicht enthalten. Verwenden Sie die Anweisungen in den folgenden Abschnitten, um diese zusätzlichen Berichte zu erstellen.

ADDM

ADDM ist ein Diagnosetool, das die AWR-Daten analysiert, Leistungsengpässe identifiziert und Empfehlungen gibt.

Hinweis: ADDM erfordert eine Diagnostic Pack-Lizenz und ist nur für die Enterprise Edition von Oracle verfügbar.

1.    Führen Sie eine Abfrage ähnlich der folgenden aus, um die Start- und End-Snapshot-ID für den Zeitraum hoher CPU-Last zu ermitteln:

SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;

2.    Generieren Sie den ADDM-Bericht.

3.    Laden Sie den ADDM-Bericht herunter.

4.    Überprüfen Sie die Empfehlungen im ADDM-Bericht.

ASH

ASH ist ein Diagnosewerkzeug, das Informationen zu aktiven Sitzungen sammelt. Gehen Sie wie folgt vor, um vorübergehende Leistungsprobleme mit ASH zu beheben:

Hinweis: ASH erfordert eine Diagnostic Pack-Lizenz und ist nur für die Enterprise Edition von Oracle verfügbar.

1.    Generieren Sie einen ASH-Bericht für den Zeitraum, in dem eine hohe CPU-Last bestand.

2.    Laden Sie den ASH-Bericht herunter.

3.    Lesen Sie den Abschnitt TOP SQL mit TOP Events.

Informationen zur Interpretation der AWR-, ADDM- und ASH-Berichte finden Sie in der Oracle-Support-Dokumentation für Oracle Support Doc ID FAQ: Automatic Workload Repository (AWR) -Berichte (Doc ID 1599440.1).

Oracle SQLT

Amazon RDS for Oracle unterstützt Oracle SQLTXPLAIN (SQLT) mithilfe der SQLT-Option. SQLT ist ein Tool, das zur Diagnose von SQL-Anweisungen verwendet wird, die keine gute Leistung erbringen.

Informationen zum Erstellen eines Berichts für eine bestimmte SQL-Anweisung finden Sie unter Oracle SQLT.

Wenn bei der Verwendung von SQLT die folgende Fehlermeldung angezeigt wird:

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

Führen Sie einen der folgenden Befehle aus, bevor Sie den Extrakt ausführen:

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