Hohe CPU-Auslastung untersuchen

Auf dieser Seite wird beschrieben, wie Sie mithilfe von Messwerten und Diagrammen zur CPU-Auslastung zusammen mit anderen Tools zur Selbstbeobachtung die hohe CPU-Auslastung in Ihrer Datenbank untersuchen können.

Ermitteln, ob ein System oder eine Nutzeraufgabe eine hohe CPU-Auslastung verursacht

Die Cloud Console bietet verschiedene Monitoring-Tools für Cloud Spanner, mit denen Sie den Status der wichtigsten Messwerte für Ihre Instanz abrufen können. Eines dieser Diagramme ist CPU-Auslastung – Hohe Priorität. Das Diagramm zeigt die CPU-Auslastung von Aufgaben mit hoher Priorität im Vergleich zur empfohlenen maximalen CPU-Auslastung für Instanzen mit einer einzelnen Region und mit mehreren Regionen. Es gibt zwei Arten von Aufgaben: Nutzeraufgaben wie Lese- und Schreibvorgänge und Systemaufgaben wie die Verdichtung und das Backfill eines Index.

So unterscheiden Sie in einem Diagramm zwischen den Aufgabentypen:

  1. Klicken Sie im Diagramm auf das Symbol Weitere Diagrammoptionen.

  2. Wählen Sie Im Metrics Explorer ansehen aus.

  3. Fügen Sie im Metrics Explorer zur Option Gruppieren nach is_system hinzu. Im Diagramm wird jetzt die CPU-Nutzung nach System- und Nutzeraufgabe aufgeschlüsselt angezeigt.

Abbildung 1 zeigt ein Beispiel für das Diagramm „CPU-Auslastung nach hoher Priorität“.

Grafik: Beispiel für ein Diagramm zur CPU-Auslastung mit hoher Priorität

Abbildung 1. Diagramm zur CPU-Auslastung nach hoher Priorität im Monitoring-Dashboard in der Cloud Console

Angenommen, Sie erhalten von Cloud Monitoring eine Benachrichtigung, dass die CPU-Auslastung deutlich gestiegen ist. Sie öffnen das Dashboard Monitoring für Ihre Instanz in der Cloud Console und überprüfen das Diagramm CPU-Auslastung – Hohe Priorität, indem Sie es im Metrics Explorer öffnen. Wie in Abbildung 1 gezeigt, sehen Sie, dass die CPU-Auslastung mit hoher Priorität zunimmt, und wenn Sie den Wert von is_system prüfen, stellen Sie fest, dass die Spitze durch den Nutzeraufgaben verursacht wird. Der nächste Schritt besteht darin, herauszufinden, welcher Nutzervorgang die Erhöhung der CPU-Auslastung verursacht.

Ermitteln, welcher Nutzervorgang die Spitze der CPU-Auslastung verursacht

Das Diagramm CPU-Auslastung – Hohe Priorität in Abbildung 1 zeigte, dass Nutzeraufgaben mit hoher Priorität die CPU-Auslastung erhöhen.

Als Nächstes untersuchen Sie den Messwert CPU-Auslastung nach Vorgangstyp, indem Sie mithilfe des Metrics Explorers von Cloud Monitoring ein Diagramm erstellen. Dieses Diagramm zeigt die CPU-Auslastung, aufgeschlüsselt nach vom Nutzer initiierten Vorgängen mit hoher Priorität.

Was ist ein vom Nutzer initiierter Vorgang?

Ein vom Nutzer initiierter Vorgang ist ein Vorgang, der über eine API-Anfrage initiiert wird. Cloud Spanner gruppiert diese Anfragen in Vorgangstypen oder Kategorien. Jeder Vorgangstyp kann als Linie im Diagramm CPU-Auslastung nach Vorgangstyp angezeigt werden. In der folgenden Tabelle werden die API-Methoden beschrieben, die in den einzelnen Vorgangstypen enthalten sind.

Aktion API-Methoden Beschreibung
read_readonly Read
StreamingRead
Enthält Lesevorgänge, die Zeilen mit Schlüsselsuchen und -scans aus der Datenbank abrufen.
read_readwrite Read
StreamingRead
Enthält Lesevorgänge in Lese-Schreib-Transaktionen.
read_withpartitiontoken Read
StreamingRead
Umfasst Lesevorgänge, die mit einer Reihe von Partitionstokens ausgeführt werden.
executesql_select_readonly ExecuteSql
ExecuteStreamingSql
Enthält eine Anweisung zum Ausführen von Select-SQL.
executesql_select_readwrite ExecuteSql
ExecuteStreamingSql
Enthält eine Anweisung zum Ausführen von Select innerhalb von Lese-Schreib-Transaktionen.
executesql_select_withpartitiontoken ExecuteSql
ExecuteStreamingSql
Enthält eine Anweisung zum Ausführen von Select, die mit einer Reihe von Partitionstokens ausgeführt wird.
executesql_dml_readwrite ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
Enthält eine Anweisung zum Ausführen der DML-SQL-Anweisung.
executesql_dml_partitioned ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
Enthält eine partitionierte DML-SQL-Anweisung.
beginorcommit BeginTransaction
Commit
Rollback
Enthält Anfangs-, Commit- und Rollback-Transaktionen.
misc PartitionQuery
PartitionRead
GetSession
CreateSession
Enthält PartitionQuery, PartitionRead, Create Database, Create Instance, sitzungsbezogene Vorgänge, interne zeitkritische Bereitstellungsvorgänge usw.

Diagramm zur CPU-Auslastung nach Vorgangstyp im Metrics Explorer erstellen

  1. Wählen Sie in der Cloud Console Monitoring aus, oder klicken Sie auf die folgende Schaltfläche:

    Zu Monitoring

  2. Wählen Sie im Navigationsbereich den Metrics Explorer aus.
  3. Geben Sie im Feld Ressourcentyp und Messwert suchen den Wert spanner.googleapis.com/instance/cpu/utilization_by_operation_type ein und klicken Sie dann auf die Zeile, die unter dem Feld angezeigt wird.
  4. Geben Sie im Feld Filter den Wert instance_id ein. Geben Sie dann die Instanz-ID ein, die Sie prüfen möchten, und klicken Sie auf >Übernehmen.
  5. Wählen Sie im Feld Gruppieren nach aus der Drop-down-Liste category aus. Das Diagramm zeigt die CPU-Auslastung der Nutzeraufgaben, gruppiert nach Vorgangstyp oder Kategorie.

Hier ein Beispieldiagramm des Messwerts CPU-Auslastung nach Vorgangstyp.

Grafik: Beispiel für ein Diagramm der CPU-Auslastung nach Vorgangstypen

Abbildung 2. Diagramm zur CPU-Auslastung nach Vorgangstyp im Metrics Explorer

Jeder Vorgangstyp oder jede Kategorie wird in einem Liniendiagramm dargestellt. Der Kategoriefilter unterhalb des Diagramms identifiziert die entsprechende Grafik. Sie können jedes Diagramm ausblenden und anzeigen lassen, indem Sie den entsprechenden Kategoriefilter auswählen oder die Auswahl aufheben.

Während Sie mit dem Messwert CPU-Auslastung nach Priorität im vorherigen Abschnitt feststellen konnten, ob ein Nutzer oder eine Systemaufgabe eine Erhöhung der CPU-Ressourcennutzung verursacht hat, können Sie mit dem Messwert CPU-Auslastung nach Vorgangstyp genauere Analyse vornehmen und den Typ des vom Nutzer initiierten Vorgangs, der hinter der Erhöhung der CPU-Nutzung steckt, ermitteln.

Ermitteln, welche Nutzeranfrage zu einer erhöhten CPU-Auslastung beiträgt

Zur Feststellung, welche Nutzeranfrage für den Anstieg der CPU-Auslastung in der Grafik zum Ausführungstyp executesql_select_readonly konkret verantwortlich ist, die wir in Abbildung 2 gesehen haben, verwenden wir die integrierten Statistiktabellen zur Selbstprüfung und erhalten so mehr Einblick.

Verwenden Sie die folgende Tabelle als Leitfaden, um anhand des Vorgangstyps, der eine hohe CPU-Auslastung verursacht, zu ermitteln, welche Statistiktabelle abgefragt werden soll.

Vorgangstyp Abfrage Lesen Transaktion
read_readonly Nein Ja Nein
read_readwrite Nein Ja Ja
read_withpartitiontoken Nein Ja Nein
executesql_select_readonly Ja Nein Nein
executesql_select_withpartitiontoken Ja Nein Nein
executesql_select_readwrite Ja Nein Ja
executesql_dml_readwrite Nein Nein Ja
executesql_dml_partitioned Nein Nein Ja
beginorcommit Nein Nein Ja

Wenn beispielsweise read_withpartitiontoken das Problem ist, beheben Sie den Fehler mithilfe von Lesestatistiken.

In unserem Szenario scheint der Vorgang executsql_select_readonly der Grund für die beobachtete Erhöhung der CPU-Auslastung zu sein. Anhand der vorhergehenden Tabelle sollten wir uns als Nächstes Abfragestatistiken ansehen, um herauszufinden, welche Abfragen teuer sind, häufig ausgeführt werden oder große Datenmengen scannen.

Führen Sie die folgende Abfrage in der Statistiktabelle query_stats_top_hour aus, um die Abfragen mit der höchsten CPU-Auslastung der vorherigen Stunde zu ermitteln.

SELECT text,
       execution_count AS count,
       avg_latency_seconds AS latency,
       avg_cpu_seconds AS cpu,
       execution_count * avg_cpu_seconds AS total_cpu
FROM spanner_sys.query_stats_top_hour
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.query_stats_top_hour)
ORDER BY total_cpu DESC;

Die Ausgabe zeigt Abfragen, sortiert nach CPU-Auslastung. Nachdem wir die Abfrage mit der höchsten CPU-Auslastung ermittelt haben, können wir sie mit den folgenden Optionen optimieren.

  • Prüfen Sie den Abfrageausführungsplan, um mögliche Ineffizienzen zu ermitteln, die zu einer hohen CPU-Auslastung führen können.

  • Prüfen Sie, ob die Abfrage den Best Practices für SQL für Cloud Spanner entspricht.

  • Prüfen Sie das Schemadesign der Datenbank und aktualisieren Sie das Schema, um effizientere Abfragen zu ermöglichen.

  • Richten Sie eine Referenz für die Häufigkeit ein, mit der Cloud Spanner eine Abfrage während eines Intervalls ausführt. Mit dieser Referenz können Sie die Ursache für unerwartete Abweichungen vom normalen Verhalten erkennen und untersuchen.

Wenn Sie keine CPU-intensive Abfrage gefunden haben, fügen Sie der Instanz die Rechenkapazität hinzu. Weitere Rechenkapazitäten bieten mehr CPU-Ressourcen und geben Cloud Spanner die Möglichkeit, eine größere Arbeitslast zu bewältigen. Weitere Informationen finden Sie unter Rechenkapazität erhöhen.

Nächste Schritte