Abfrageleistung analysieren

Auf dieser Seite wird beschrieben, wie Sie mit dem Query Insights-Dashboard Spanner-Leistungsprobleme erkennen und analysieren.

Übersicht über Abfragestatistiken

Mit Query Insights können Sie Leistungsprobleme bei Abfragen und DML-Anweisungen (INSERT, UPDATE und DELETE) für eine Spanner-Datenbank erkennen und diagnostizieren. Es unterstützt ein intuitives Monitoring und liefert Diagnoseinformationen, die Ihnen helfen, über die Erkennung hinaus die Ursache von Leistungsproblemen zu identifizieren.

Mit Query Insights können Sie die Leistung von Spanner-Abfragen verbessern. Dabei werden Sie durch die folgenden Schritte geführt:

  1. Prüfen Sie, ob ineffiziente Abfragen für die hohe CPU-Auslastung verantwortlich sind.
  2. Potenziell problematische Abfrage oder potenziell problematisches Tag identifizieren
  3. Abfrage oder Anfrage-Tag analysieren, um Probleme zu ermitteln

Abfragestatistiken sind sowohl in Konfigurationen mit einer als auch mit mehreren Regionen verfügbar.

Preise

Für Query Insights fallen keine zusätzlichen Kosten an.

Datenaufbewahrung

Die maximale Datenaufbewahrung für Suchanfrage-Statistiken beträgt 30 Tage. Für das Diagramm Gesamte CPU-Auslastung (pro Abfrage- oder Anfrage-Tag) werden Daten aus den SPANNER_SYS.QUERY_STATS_TOP_*-Tabellen verwendet, die eine maximale Aufbewahrungsdauer von 30 Tagen haben. Weitere Informationen finden Sie unter Datenaufbewahrung.

Erforderliche Rollen

Je nachdem, ob Sie ein IAM-Nutzer oder ein Nutzer mit detaillierter Zugriffssteuerung sind, benötigen Sie unterschiedliche IAM-Rollen und ‑Berechtigungen.

IAM-Nutzer (Identity and Access Management)

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für die Instanz zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Aufrufen der Seite „Statistiken zu Abfragen“ benötigen:

Die folgenden Berechtigungen in der Rolle Cloud Spanner-Datenbank-Leser(roles/spanner.databaseReader) sind erforderlich, um die Seite „Abfragestatistiken“ aufzurufen:

  • spanner.databases.beginReadOnlyTransaction
  • spanner.databases.select
  • spanner.sessions.create

Nutzer mit detaillierter Zugriffssteuerung

Wenn Sie die detaillierte Zugriffssteuerung verwenden, müssen Sie Folgendes beachten:

  • Sie haben die Rolle Cloud Spanner-Betrachter(roles/spanner.viewer).
  • Sie haben Berechtigungen für die detaillierte Zugriffssteuerung und die spanner_sys_reader-Systemrolle oder eine ihrer Mitgliedsrollen.
  • Wählen Sie auf der Übersichtsseite der Datenbank die spanner_sys_reader oder eine Mitgliederrolle als Ihre aktuelle Systemrolle aus.

Weitere Informationen finden Sie unter Detaillierte Zugriffssteuerung und Systemrollen für die detaillierte Zugriffssteuerung.

Das Query Insights-Dashboard

Im Query Insights-Dashboard wird die Abfragelast basierend auf der ausgewählten Datenbank und dem ausgewählten Zeitraum angezeigt. Die Abfragelast ist ein Maß für die Gesamt-CPU-Auslastung aller Abfragen in der Instanz im ausgewählten Zeitraum. Das Dashboard bietet eine Reihe von Filtern, mit denen Sie die Abfragelast anzeigen können.

So rufen Sie das Query Insights-Dashboard für eine Datenbank auf:

  1. Wählen Sie im linken Navigationsbereich Query Insights aus. Das Dashboard „Query Insights“ wird geöffnet.
  2. Wählen Sie in der Liste Datenbanken eine Datenbank aus. Das Dashboard enthält Informationen zur Abfragelast der Datenbank.

Zu den Bereichen des Dashboards gehören:

  1. Liste der Datenbanken: Filtert die Abfragelast für eine bestimmte Datenbank oder für alle Datenbanken.
  2. Zeitraumfilter: Filtert die Abfragelast nach Zeiträumen, z. B. Stunden, Tagen oder einem benutzerdefinierten Bereich.
  3. Diagramm „Gesamte CPU-Auslastung (alle Abfragen)“: Hier sehen Sie die aggregierte Last aller Abfragen.
  4. Diagramm „Gesamte CPU-Auslastung (pro Abfrage- oder Anfrage-Tag)“: Hier sehen Sie die CPU-Auslastung nach Abfrage- oder Anfrage-Tag.
  5. Tabelle „Top-N-Abfragen und ‑Tags“: Hier sehen Sie eine Liste der Top-Abfragen und ‑Anfrage-Tags, sortiert nach CPU-Auslastung. Weitere Informationen finden Sie unter Potenziell problematische Abfrage oder potenziell problematisches Tag identifizieren.

Query Insights-Dashboard

Dashboard-Leistung

Verwenden Sie Abfrageparameter oder taggieren Sie Ihre Abfragen, um die Leistung von Query Insights zu optimieren. Wenn Sie Ihre Abfragen nicht parametrisieren oder taggen, werden möglicherweise zu viele Ergebnisse zurückgegeben, was dazu führen kann, dass die Tabelle „TopN-Abfragen und -Tags“ nicht richtig geladen wird.

Prüfen, ob ineffiziente Abfragen für eine hohe CPU-Auslastung verantwortlich sind

Die CPU-Auslastung insgesamt ist ein Maß für die Arbeit (in CPU-Sekunden), die von den ausgeführten Abfragen in der ausgewählten Datenbank im Zeitverlauf ausgeführt wird.

Gesamte CPU-Auslastung für alle Abfragen

Sehen Sie sich das Diagramm an und beantworten Sie die folgenden Fragen:

  • Welche Datenbank hat die Auslastung? Wählen Sie in der Liste „Datenbanken“ verschiedene Datenbanken aus, um die Datenbanken mit den höchsten Lasten zu finden. Wenn Sie wissen möchten, welche Datenbank die höchste Auslastung hat, können Sie sich auch das Diagramm CPU-Auslastung – Gesamt für Datenbanken in der Google Cloud -Console ansehen.

    Datenbanklast

  • Ist die CPU-Auslastung hoch? Ist eine Spitze oder ein Anstieg im Zeitverlauf zu sehen? Wenn die CPU-Auslastung nicht hoch ist, liegt das Problem nicht bei Ihren Abfragen.

  • Wie lange ist die CPU-Auslastung hoch? Gab es vor Kurzem einen Anstieg oder ist die Auslastung schon seit einiger Zeit hoch? Verwenden Sie die Bereichsauswahl, um verschiedene Zeiträume auszuwählen, um herauszufinden, wie lange das Problem besteht. Heranzoomen Sie die Ansicht, um ein Zeitfenster zu sehen, in dem Spitzen bei der Abfragelast beobachtet werden. Zoomen Sie heraus, um bis zu einer Woche der Zeitachse anzuzeigen.

Wenn Sie in der Grafik einen Anstieg oder eine Erhöhung sehen, die der CPU-Auslastung der Instanz insgesamt entspricht, liegt das höchstwahrscheinlich an einer oder mehreren kostenintensiven Abfragen. Als Nächstes können Sie die Fehlerbehebung vertiefen, indem Sie eine potenziell problematische Abfrage oder ein Anfrage-Tag identifizieren.

Potenziell problematische Abfrage oder potenziell problematisches Anfrage-Tag identifizieren

Im Bereich „TopN-Abfragen“ können Sie potenziell problematische Abfragen oder Anfrage-Tags identifizieren:

Top-N-Abfragen

Hier sehen Sie, dass die Abfrage mit FPRINT 6815864236081503267 eine hohe CPU-Auslastung hat und möglicherweise ein Problem darstellt.

Die Tabelle TopN-Abfragen bietet einen Überblick über die Abfragen, die im ausgewählten Zeitraum die höchste CPU-Auslastung haben, sortiert von der höchsten zur niedrigsten. Die Anzahl der TopN-Abfragen ist auf 100 beschränkt.

Für die Diagramme werden die Daten aus der Tabelle „TopN-Abfragestatistiken“ abgerufen, die drei verschiedene Detailebenen hat: 1 Minute, 10 Minuten und 1 Stunde. Der Wert für jeden Datenpunkt in den Diagrammen entspricht dem Mittelwert über einen Zeitraum von einer Minute.

Wir empfehlen, Ihren SQL-Abfragen Tags hinzuzufügen. Mit der Tag-Kennzeichnung von Abfragen können Sie Probleme auf übergeordneten Konstrukten finden, z. B. mit der Geschäftslogik oder einem Mikrodienst.

Tabelle „Top-N-Abfragen“

Die Tabelle enthält die folgenden Attribute:

  • FPRINT: Hash des Anfrage-Tags, falls vorhanden; andernfalls der Hash der Abfrage.
  • Abfrage- oder Anfrage-Tag: Wenn der Suchanfrage ein Tag zugewiesen ist, wird das Anfrage-Tag angezeigt. Statistiken für mehrere Abfragen, die denselben Tag-String haben, werden in einer einzelnen Zeile gruppiert, wobei mit diesem Tag-String übereinstimmt.REQUEST_TAG Weitere Informationen zur Verwendung von Anfrage-Tags finden Sie unter Fehlerbehebung bei Anfrage- und Transaktions-Tags.

    Wenn der Abfrage kein Tag zugewiesen ist, wird die SQL-Abfrage, die auf etwa 64 KB gekürzt wurde, angezeigt. Bei der Batch-DML werden die SQL-Anweisungen in eine einzige Zeile umgewandelt und mit einem Semikolon als Trennzeichen zusammengefügt. Nachfolgende identische SQL-Texte werden vor dem Kürzen dedupliziert.

  • Abfragetyp: Gibt an, ob es sich bei einer Abfrage um eine PARTITIONED_QUERY oder QUERY handelt. Eine PARTITIONED_QUERY ist eine Abfrage mit einem partitionToken, das über die PartitionQuery API abgerufen wurde. Alle anderen Abfragen und DML-Anweisungen werden durch den Abfragetyp QUERY gekennzeichnet.

  • CPU-Auslastung: Die CPU-Ressourcennutzung durch eine Abfrage als Prozentsatz der gesamten CPU-Ressourcen, die von allen Abfragen verwendet werden, die in diesem Zeitintervall in den Datenbanken ausgeführt werden. Die Werte werden in einem horizontalen Balken mit einem Bereich von 0 bis 100 dargestellt.

  • CPU (%): CPU-Ressourcenverbrauch durch eine Abfrage als Prozentsatz der gesamten CPU-Ressourcen, die von allen Abfragen verwendet werden, die in diesem Zeitraum in den Datenbanken ausgeführt werden.

  • Ausführungsanzahl: Häufigkeit, mit der die Abfrage während des Intervalls von Spanner verarbeitet wurde.

  • Durchschnittliche Latenz (ms): Durchschnittliche Zeit in Mikrosekunden für jede Abfrageausführung in der Datenbank. Dieser Durchschnitt schließt die Codierungs- und Übertragungszeit für die Ergebnismenge sowie den Aufwand aus.

  • Durchschnittlich gescannte Zeilen: Durchschnittliche Anzahl der Zeilen, die von der Abfrage gescannt wurden, ausgenommen gelöschte Werte.

  • Durchschnittliche zurückgegebene Zeilen: Die durchschnittliche Anzahl der Zeilen, die die Abfrage zurückgegeben hat.

  • Zurückgegebene Bytes: Anzahl der von der Abfrage zurückgegebenen Datenbyte, ohne den Aufwand der Übertragungscodierung.

Mögliche Abweichungen zwischen den Diagrammen

Möglicherweise bemerken Sie Abweichungen zwischen dem Diagramm Gesamte CPU-Auslastung (alle Abfragen) und dem Diagramm Gesamte CPU-Auslastung (pro Abfrage- oder Anfrage-Tag). Es gibt zwei Dinge, die zu diesem Szenario führen können:

  • Verschiedene Datenquellen: Die Cloud Monitoring-Daten, die in das Diagramm „Gesamte CPU-Auslastung (alle Abfragen)“ einfließen, sind in der Regel genauer, da sie jede Minute gepusht werden und eine Aufbewahrungsdauer von 45 Tagen haben. Andererseits können die Daten der Systemtabelle, die in das Diagramm „Gesamte CPU-Auslastung (pro Abfrage- oder Anfrage-Tag)“ einfließen, über einen Zeitraum von 10 Minuten (oder 1 Stunde) gemittelt werden. In diesem Fall gehen möglicherweise Daten mit hoher Detailgenauigkeit verloren, die im Diagramm „Gesamte CPU-Auslastung (alle Abfragen)“ zu sehen sind.

  • Unterschiedliche Aggregationszeiträume: Beide Diagramme haben unterschiedliche Aggregationszeiträume. Wenn wir beispielsweise ein Ereignis prüfen möchten, das älter als 6 Stunden ist, würden wir die Tabelle SPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE abfragen. In diesem Fall wird ein Ereignis, das um 10:01 Uhr auftritt, über einen Zeitraum von 10 Minuten zusammengefasst und in der Systemtabelle mit dem Zeitstempel 10:10 aufgeführt.

Der folgende Screenshot zeigt ein Beispiel für eine solche Abweichung.

Abweichungen zwischen Diagrammen

Bestimmte Abfrage oder bestimmtes Anfrage-Tag analysieren

Klicken Sie auf die Abfrage oder das Anfrage-Tag, das vermeintlich die höchste Last hat oder mehr Zeit als die anderen benötigt, um festzustellen, ob eine Abfrage oder ein Tag die Ursache für das Problem ist. Sie können mehrere Abfragen und Tags gleichzeitig auswählen.

Wenn Sie den Mauszeiger auf das Diagramm für Abfragen im Zeitverlauf bewegen, sehen Sie die CPU-Auslastung (in Sekunden).

Versuchen Sie, das Problem folgendermaßen einzugrenzen:

  • Wie lange war die Last hoch? Ist sie nur jetzt hoch? Oder ist sie schon lange hoch? Ändern Sie die Zeiträume, um das Datum und die Uhrzeit zu ermitteln, zu der sich die Leistung der Abfrage verschlechterte.
  • Gibt es CPU-Auslastungsspitzen? Sie können das Zeitfenster ändern, um die bisherige CPU-Auslastung für die Abfrage zu untersuchen.
  • Wie hoch ist der Ressourcenverbrauch? Wie hängt er mit anderen Abfragen zusammen? Sehen Sie sich die Tabelle an und vergleichen Sie die Daten anderer Abfragen mit der ausgewählten. Gibt es einen großen Unterschied?

Wenn Sie prüfen möchten, ob die ausgewählte Abfrage zur hohen CPU-Auslastung beiträgt, können Sie die Details der jeweiligen Abfrageform (oder des jeweiligen Anfrage-Tags) aufrufen und auf der Seite „Abfragedetails“ weiter analysieren.

Seite „Abfragedetails“ aufrufen

Wenn Sie die Details einer bestimmten Abfrageform oder eines bestimmten Anfragetags in grafischer Form aufrufen möchten, klicken Sie auf den FPRINT, der mit der Abfrage oder dem Anfragetag verknüpft ist. Die Seite „Abfragedetails“ wird geöffnet.

Seite mit Abfragedetails

Auf der Seite „Abfragedetails“ werden die folgenden Informationen angezeigt:

  1. Abfragedetails: SQL-Abfragetext, verkürzt auf ca. 64 KB. Statistiken für mehrere Abfragen, die denselben Tag-String haben, werden in einer einzelnen Zeile gruppiert, wobei REQUEST_TAG mit diesem Tag-String übereinstimmt. In diesem Feld wird nur der Text einer dieser Abfragen angezeigt. Bei der Batch-DML werden die SQL-Anweisungen in eine einzige Zeile umgewandelt und mit einem Semikolon als Trennzeichen zusammengefügt. Nachfolgende identische SQL-Texte werden vor dem Kürzen dedupliziert.
  2. Die Werte der folgenden Felder:
    • Ausführungsanzahl: Häufigkeit, mit der die Abfrage während des Intervalls von Spanner verarbeitet wurde.
    • Durchn. CPU (ms): Durchschnittliche CPU-Ressourcennutzung in Millisekunden durch eine Abfrage der CPU-Ressourcen der Instanz in einem bestimmten Zeitraum.
    • Durchschn. Latenz (ms): Durchschnittliche Zeit in Millisekunden für jede Abfrageausführung in der Datenbank. Dieser Durchschnitt schließt die Codierungs- und Übertragungszeit für die Ergebnismenge sowie den Aufwand aus.
    • Durchschnittliche zurückgegebene Zeilen: Die durchschnittliche Anzahl der Zeilen, die die Abfrage zurückgegeben hat.
    • Durchschnittlich gescannte Zeilen: Durchschnittliche Anzahl der Zeilen, die von der Abfrage gescannt wurden, ausgenommen gelöschte Werte.
    • Durchschn. Bytes: Anzahl der von der Abfrage zurückgegebenen Datenbyte, ohne den Aufwand der Übertragungscodierung.
  3. Diagramm „Abfrageplanbeispiele“: Jeder Punkt im Diagramm steht für einen abgetasteten Abfrageplan zu einer bestimmten Zeit und die zugehörige Abfragelatenz. Klicken Sie auf einen der Punkte im Diagramm, um den Abfrageplan aufzurufen und die Schritte während der Abfrageausführung zu visualisieren. Hinweis: Abfragepläne werden nicht für Abfragen mit Partitionstokens unterstützt, die über die PartitionQuery API abgerufen wurden, und für partitionierte DML-Abfragen.
  4. Abfrageplan-Visualisierung: Hier sehen Sie den ausgewählten Stichproben-Abfrageplan. Jeder Knoten oder jede Karte im Graphen stellt einen Iterator dar, der Zeilen aus seinen Eingaben konsumiert und Zeilen für sein übergeordnetes Element generiert. Wenn Sie auf einen Iterator klicken, werden erweiterte Informationen angezeigt.
  5. Abfragelatenzdiagramm: Hier sehen Sie den Wert der Abfragelatenz für eine ausgewählte Abfrage über einen bestimmten Zeitraum. Außerdem wird die durchschnittliche Latenz angezeigt.
  6. Diagramm „CPU-Auslastung“: Zeigt die CPU-Auslastung durch eine Abfrage in Prozentsätzen über einen bestimmten Zeitraum an. Außerdem wird die durchschnittliche CPU-Auslastung angezeigt.
  7. Diagramm „Ausführungsanzahl/Fehlgeschlagen“: Zeigt die Ausführungsanzahl einer Abfrage über einen bestimmten Zeitraum und die Häufigkeit, mit der die Abfrage fehlgeschlagen ist.
  8. Diagramm „Gescannte Zeilen“: Die Anzahl der Zeilen, die in einem bestimmten Zeitraum von der Abfrage gescannt wurden.
  9. Diagramm „Zurückgegebene Zeilen“: Die Anzahl der Zeilen, die die Abfrage in einem bestimmten Zeitraum zurückgegeben hat.
  10. Zeitraumfilter: Filtert Abfragedetails nach Zeiträumen, z. B. Stunde, Tag oder benutzerdefinierter Bereich.

Für die Diagramme werden die Daten aus der Tabelle „TopN-Abfragestatistiken“ abgerufen, die drei verschiedene Detailebenen hat: 1 Minute, 10 Minuten und 1 Stunde. Der Wert für jeden Datenpunkt in den Diagrammen entspricht dem Mittelwert über einen Zeitraum von einer Minute.

Im Audit-Log nach allen Ausführungen einer Abfrage suchen

Wenn Sie in den Cloud-Audit-Logs nach allen Ausführungen eines bestimmten Abfrage-Fingerabdrucks suchen möchten, fragen Sie das Audit-Log ab und suchen Sie nach allen query_fingerprint, die mit dem Feld FPRINT in der Tabelle mit TopN-Abfragestatistiken übereinstimmen. Weitere Informationen finden Sie in der Übersicht zum Abfragen und Ansehen von Protokollen. Mit dieser Methode können Sie den Nutzer identifizieren, der die Abfrage initiiert hat.