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:
Klicken Sie im Diagramm auf das Symbol Weitere Diagrammoptionen.
Wählen Sie Im Metrics Explorer ansehen aus.
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“.
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
- Wählen Sie in der Cloud Console Monitoring aus, oder klicken Sie auf die folgende Schaltfläche:
- Wählen Sie im Navigationsbereich den Metrics Explorer aus.
-
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. -
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. -
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.
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
Weitere Informationen zu Messwerten zur CPU-Auslastung
Weitere Informationen zu Tools zur Selbstbeobachtung
SQL-Best-Practices für Cloud Spanner
Liste der Messwerte aus Cloud Spanner ansehen