Wie behebe ich Probleme mit hoher CPU-Auslastung in meinem Amazon RDS für Oracle-Datenbank?

Lesedauer: 9 Minute
0

Ich habe eine hohe CPU-Auslastung auf meinem Amazon Relational Database Service (Amazon RDS) für Oracle DB-Instance.

Kurzbeschreibung

Wenn Ihre RDS für 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-Repository (AWR)
  • Automatischer Datenbankdiagnosemonitor (ADDM)
  • Verlauf aktiver Sitzungen (ASH)
  • Oracle SQLT

Lösung

Identifizieren Sie bei der Diagnose von Problemen im Zusammenhang mit einer hohen 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. Sehen Sie sich die folgenden CloudWatch-Metriken für Amazon RDS an, um CPU-Muster über längere Zeiträume zu identifizieren:

  • CPUUtilization
  • CPUCreditUsage, wenn Sie eine T2- oder T3-Instanz verwenden
  • CPUCreditBalance, wenn Sie eine T2- oder T3-Instanz verwenden

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

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

Weitere Informationen finden Sie unter Überwachen von Amazon RDS-Metriken mit Amazon CloudWatch und Anzeigen von Instanz-Status und Empfehlungen.

Enhanced Monitoring-Metriken

Enhanced Monitoring stellt in Echtzeit Metriken für das Betriebssystem bereit, auf dem Ihre DB-Instanz ausgeführt wird. Während CloudWatch die CPU-Auslastungsmetriken vom Hypervisor erhält, erhält Enhanced Monitoring diese Metriken von einem Agenten auf der DB-Instanz. Die 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 hat sich bewährt, die Granularität für geschäftskritische Anwendungen auf 1 Sekunde oder 5 Sekunden festzulegen. Mit dieser Granularität liefern die Metriken genauere Informationen über die Auslastung 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 Regiterkarte Überwachung.
  5. Wählen Sie in der Dropdown-Liste Überwachung die Option Erweiterte Überwachung aus.
  6. Wenn es sich bei der Instanz um eine Multi-AZ-Bereitstellung handelt, wählen Sie in der Ansicht Enhanced Monitoring die Option Primär aus, um die Betriebssystemmetriken der primären Instanz anzuzeigen. Wählen Sie Sekundär, 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 Gesamt gibt 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, die die CPU-Zeit in der letzten Minute, den letzten fünf Minuten bzw. den letzten 15 Minuten angefordert haben. Wenn der Lastdurchschnitt höher ist als die Anzahl der vCPUs, kann es bei der Instanz zu einem CPU-Engpass kommen.

Um die Betriebssystemprozesse anzuzeigen, wählen Sie in der Dropdownliste Überwachung OS-Prozessliste aus. Sortieren Sie dann die Liste nach CPU%-Werten, um den Prozess zu ermitteln, der die meiste CPU-Auslastung aufweist.

Beispiel:

NAMEVIRTRESCPU%MEM%VMLIMIT
oracleORCL [27074]ᵗ6,07 GiB1.007,24 MB44.7212,78unbeschränkt
oracleORCL [27076]ᵗ6.07 GiB1,010.02 MB44.6412,82unbeschränkt

Weitere Informationen zu den Spalten im vorherigen Beispiel finden Sie unter Betriebssystemmetriken in der RDS-Konsole anzeigen.

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 Enhanced-Monitoring-Diagramme im Enhanced Monitoring-Dashboard angezeigt. Um sich einen Überblick über die Arbeitslast zum Zeitpunkt des Anstiegs der CPU-Auslastung zu verschaffen, aktivieren Sie zusätzliche Grafiken, indem Sie wie folgt vorgehen:

  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 Regiterkarte Überwachung.
  5. Wählen Sie in der Dropdown-Liste Überwachung die Option Erweiterte Überwachung aus.
  6. Wählen Sie in der Ansicht Enhanced Monitoring die Option Diagramme verwalten aus.
  7. Wählen Sie die Grafiken aus, die Sie anzeigen möchten.
  8. Wählen Sie Speichern aus.

Beispiele für Grafiken, die Sie sich ansehen könnten:

Speicher

  • Kostenlos
  • Zwischengespeichert
  • Gepuffert
  • Insgesamt
  • Schmutzig
  • Aktiv
  • Platte

Hinweis: Metriken, die sich auf Metriken beziehen, werden aus der Datei /proc/meminfo abgerufen.

Tauschen

  • Tauschen
  • Kostenlos

Festplatten-E/A und E/A für physische Geräte

  • IO/s lesen
  • IO/s schreiben
  • Durchschn. Warteschlangengröße
  • Warten

CPU

  • Benutzer
  • Insgesamt
  • System
  • Warten
  • Leerlauf
  • Nett

Eine Liste der verfügbaren Metriken finden Sie unter Überblick über Enhanced Monitoring.

Weitere Informationen zu Enhanced Monitoring finden Sie unter Überwachen von Betriebssystemmetriken mit Enhanced Monitoring.

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

Performance Insights-Metriken

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

  1. Öffnen Sie die Amazon RDS-Konsole.
  2. Wählen Sie im Navigationsbereich Performance Insights.
  3. Wählen Sie die DB-Instanz aus, die Sie überwachen möchten.
  4. Wählen Sie für Vergangenes anzeigen die Dauer Ihrer Wahl aus.
  5. Überprüfen Sie im Diagramm Datenbanklast den Zeitpunkt, zu dem die CPU-Auslastung stark angestiegen ist.
  6. Wählen Sie die Registerkarte Top Waits.
    Notieren Sie sich die häufigsten Warteereignisse während des Zeitraums des Spitzenanstiegs.
  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 Tool zur Leistungsberichterstattung, das die Leistungskennzahlen Ihrer Datenbank über einen bestimmten Zeitraum bereitstellt.

Gehen Sie wie folgt vor, um die CPU-Auslastung Ihrer Instanz 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. Sehen Sie sich die häufigsten Warteereignisse an.

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 (auf der Oracle-Website) ist ein Tool zur Leistungsberichterstattung von Oracle, das Leistungskennzahlen ü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;
  1. Generieren Sie den AWR-Bericht.

  2. Laden Sie den AWR-Bericht herunter.

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

  4. Sehen Sie sich die häufigsten Warteereignisse an.

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 nicht alle ADDM- und ASH-Berichte 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 abgibt.

**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;
  1. Generieren Sie den ADDM-Bericht.

  2. Laden Sie den ADDM-Bericht herunter.

  3. Lesen Sie die Empfehlungen im ADDM-Bericht.

ASH

ASH (auf der Oracle-Website) ist ein Diagnosetool, das aktive Sitzungsinformationen 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 herrschte.

  2. Laden Sie den ASH-Bericht herunter.

  3. Lesen Sie den Abschnitt TOP SQL mit TOP-Ereignissen.

Informationen zur Interpretation der AWR-, ADDM- und ASH-Berichte finden Sie in der Oracle-Support-Dokumentation unter Häufig gestellte Fragen zur Oracle Support Doc-ID: Automatic Workload Repository (AWR)-Berichte (Dokument-ID 1599440.1).

Oracle SQLT

Amazon RDS unterstützt Oracle SQLTXPLAIN (SQLT) durch die Verwendung der SQLT-Option. SQLT ist ein Tool, das zur Diagnose von SQL-Anweisungen verwendet wird, die nicht gut funktionieren.

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

Wenn Sie bei der Verwendung von SQLT die folgende Fehlermeldung erhalten:

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 Auszug 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’);

Ähnliche Informationen

Überblick über die Überwachungsmetriken in Amazon RDS

Generieren von Leistungsberichten mit Automatic Workload Repository (AWR)

Generieren eines ADDM-Berichts

Generieren eines ASH-Berichts

Wie überprüfe ich die Leistungsstatistiken einer Amazon RDS-DB-Instance, auf der Oracle ausgeführt wird?