Abfrageleistung analysieren

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

Query Insights – Übersicht

Mit Query Insights können Sie Leistungsprobleme bei Abfragen und DML-Anweisung für eine Spanner-Datenbank erkennen und diagnostizieren. Sie unterstützt intuitives Monitoring und bietet Diagnoseinformationen, mit denen Sie über die Erkennung hinaus die Ursache von Leistungsproblemen ermitteln können.

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

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

Query Insights sind sowohl in Konfigurationen mit einer einzelnen Region als auch in multiregionalen Konfigurationen verfügbar.

Preise

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

Datenaufbewahrung

Die maximale Datenaufbewahrung für Query Insights 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 entnommen, die eine maximale Aufbewahrungsdauer von 30 Tagen haben. Weitere Informationen finden Sie unter Datenaufbewahrung.

Erforderliche Rollen

Sie benötigen unterschiedliche IAM-Rollen und -Berechtigungen, je nachdem, ob Sie IAM-Nutzer oder Nutzer einer detaillierten Zugriffssteuerung sind.

IAM-Nutzer (Identity and Access Management)

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für die Instanz zu gewähren, damit Sie die Berechtigungen erhalten, die Sie zum Aufrufen der Seite „Abfragestatistiken“ 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 der detaillierten Zugriffssteuerung

Wenn Sie ein Nutzer der detaillierten Zugriffssteuerung sind, müssen Sie Folgendes beachten:

  • Verwenden Sie den Cloud Spanner-Betrachter(roles/spanner.viewer).
  • Sie haben detaillierte Zugriffssteuerungsberechtigungen und die Systemrolle spanner_sys_reader oder eine ihrer Mitgliederrollen zugewiesen.
  • Wählen Sie auf der Übersichtsseite der Datenbank die Rolle spanner_sys_reader oder eine Mitgliedsrolle als aktuelle Systemrolle aus.

Weitere Informationen finden Sie unter Details zur fein abgestimmten Zugriffssteuerung und detaillierte Zugriffssteuerungssystemrollen.

Das Dashboard für Abfragestatistiken

Das Dashboard für Abfragestatistiken zeigt die Abfragelast basierend auf der ausgewählten Datenbank und dem ausgewählten Zeitraum an. Die Abfragelast ist ein Messwert für die gesamte CPU-Auslastung für alle Abfragen in der Instanz im ausgewählten Zeitraum. Das Dashboard enthält 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 für Abfragestatistiken wird geöffnet.
  2. Wählen Sie in der Liste Datenbanken eine Datenbank aus. Das Dashboard zeigt die Informationen zur Abfragelast für die Datenbank an.

Zu den Bereichen des Dashboards gehören:

  1. Datenbankliste: Filtert die Abfragelast für eine bestimmte Datenbank oder alle Datenbanken.
  2. Zeitraumfilter: Filtert die Abfragelast nach Zeiträumen wie Stunden, Tagen oder einem benutzerdefinierten Bereich.
  3. Diagramm zur gesamten CPU-Auslastung (alle Abfragen): Zeigt die zusammengefasste Last aller Abfragen an.
  4. Diagramm zur Gesamt-CPU-Auslastung (pro Abfrage oder Anfrage-Tag): Zeigt die CPU-Auslastung nach jeder Abfrage oder jedem Anfrage-Tag an.
  5. Tabelle mit Top-N-Abfragen und -Tags: Zeigt die Liste der Top-Abfragen und -Anfrage-Tags an, sortiert nach CPU-Auslastung. Siehe Potenziell problematische Abfragen oder Tags identifizieren.

Dashboard für Abfragestatistiken

Dashboard-Leistung

Verwenden Sie Abfrageparameter oder Tags für Abfragen, um die Leistung von Query Insights zu optimieren. Wenn Sie Ihre Abfragen nicht parametrisieren oder taggen, können zu viele Ergebnisse zurückgegeben werden. Dies kann dazu führen, dass die Tabelle mit den TopN-Abfragen und -Tags nicht richtig geladen wird.

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

Die gesamte CPU-Auslastung ist ein Maß für die Arbeit (in CPU-Sekunden), die die ausgeführten Abfragen in der ausgewählten Datenbank im Zeitverlauf ausführen.

Gesamte CPU-Auslastung für alle Abfragen

Sehen Sie sich die Grafik an, um die folgenden Fragen zu beantworten:

  • Welche Datenbank hat die Auslastung? Wählen Sie verschiedene Datenbanken aus der Datenbankliste aus, um die Datenbanken mit den höchsten Lasten zu finden. Sie können auch in der Google Cloud Console das Diagramm CPU-Auslastung – gesamt für Datenbanken aufrufen, um zu ermitteln, welche Datenbank die höchste Last hat.

    Datenbanklast

  • Ist die CPU-Auslastung hoch? Ist eine Spitze oder ein Anstieg im Zeitverlauf zu sehen? Wenn keine hohe CPU-Auslastung angezeigt wird, liegt das Problem nicht an Ihren Abfragen.

  • Wie lange ist die CPU-Auslastung hoch? War sie in letzter Zeit gestiegen oder war sie schon länger hoch? Verwenden Sie die Bereichsauswahl, um verschiedene Zeiträume auszuwählen, um herauszufinden, wie lange das Problem besteht. Zoomen Sie heran, 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 im Diagramm einen Ausschlag oder einen Anstieg sehen, der der gesamten CPU-Auslastung der Instanz entspricht, ist dies höchstwahrscheinlich auf eine oder mehrere teure Abfragen zurückzuführen. Als Nächstes können Sie die Fehlerbehebung genauer untersuchen, indem Sie eine potenziell problematische Abfrage oder ein potenziell problematisches Anfrage-Tag identifizieren.

Potenziell problematische Abfrage oder Anfrage-Tag identifizieren

Informationen zum Ermitteln potenziell problematischer Abfragen oder Anfrage-Tags finden Sie im Abschnitt zu den Top-N-Abfragen:

Top-N-Abfragen

Hier sehen wir, dass die Abfrage mit FDRUCK 6815864236081503267 eine hohe CPU-Auslastung hat und problematisch sein könnte.

Die Tabelle TopN-Abfragen bietet einen Überblick über die Abfragen, die im ausgewählten Zeitfenster die meisten CPU-Auslastung haben. Die Abfrage ist in absteigender Reihenfolge sortiert. Die Anzahl der TopN-Abfragen ist auf 100 begrenzt.

Für die Grafiken rufen wir die Daten aus der TopN-Abfragestatistiktabelle mit drei verschiedenen Detaillierungsgraden ab: 1 Min., 10 Min. und 1 Stunde. Der Wert für jeden Datenpunkt in den Diagrammen stellt den Durchschnittswert über ein Intervall von einer Minute dar.

Es wird empfohlen, Tags zu Ihren SQL-Abfragen hinzuzufügen. Durch das Taggen von Abfragen können Sie Probleme in übergeordneten Konstrukten finden, z. B. mit der Geschäftslogik oder einem Mikrodienst.

Tabelle mit Top-N-Abfragen

Die Tabelle enthält die folgenden Attribute:

  • F: Hash des Anfrage-Tags, falls vorhanden, andernfalls der Hash der Abfrage.
  • Abfrage- oder Anfrage-Tag: Wenn der Abfrage ein Tag zugeordnet ist, wird das Anfrage-Tag angezeigt. Statistiken für mehrere Abfragen mit demselben Tag-String werden in einer einzelnen Zeile gruppiert, wobei der REQUEST_TAG-Wert mit dem Tag-String übereinstimmt. Weitere Informationen zur Verwendung von Anfrage-Tags finden Sie unter Fehlerbehebung mit Anfrage- und Transaktions-Tags.

    Wenn der Abfrage kein Tag zugeordnet ist, wird die auf etwa 64 KB gekürzte SQL-Abfrage angezeigt. Für Batch-DML werden die SQL-Anweisungen in einer einzigen Zeile zusammengefasst und mithilfe eines Semikolon-Trennzeichens verkettet. Aufeinanderfolgende identische SQL-Texte werden vor dem Kürzen dedupliziert.

  • Abfragetyp: Gibt an, ob die Abfrage PARTITIONED_QUERY oder QUERY ist. Ein PARTITIONED_QUERY ist eine Abfrage mit einem partitionToken, der von der PartitionQuery API abgerufen wurde. Alle anderen Abfragen und DML-Anweisungen sind durch den Abfragetyp QUERY angegeben.

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

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

  • Ausführungsanzahl: Häufigkeit, mit der Spanner die Abfrage während des Intervalls gesehen hat.

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

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

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

  • Zurückgegebene Byte: Anzahl der Datenbyte, die die Abfrage zurückgegeben hat, ohne den Übertragungsaufwand für die Codierung.

Mögliche Abweichungen zwischen den Diagrammen

Sie stellen möglicherweise Abweichungen zwischen der Grafik Gesamte CPU-Auslastung (alle Abfragen) und der Grafik Gesamte CPU-Auslastung (pro Abfrage oder Anfrage-Tag) fest. Zwei Dinge könnten zu diesem Szenario führen:

  • Verschiedene Datenquellen: Die Cloud Monitoring-Daten, die das Diagramm zur Gesamt-CPU-Auslastung (alle Abfragen) versorgen, sind in der Regel genauer, da sie jede Minute übertragen werden und eine Aufbewahrungsdauer von 45 Tagen haben. Andererseits können die Daten der Systemtabelle, die das Diagramm zur Gesamt-CPU-Auslastung (pro Abfrage oder Anfrage-Tag) speisen, über 10 Minuten (oder 1 Stunde) gemittelt werden. In diesem Fall können detaillierte Daten verloren gehen, die wir in der Grafik zur Gesamt-CPU-Auslastung (alle Abfragen) sehen.

  • Verschiedene Aggregationsfenster: Beide Diagramme haben unterschiedliche Aggregationsfenster. Bei der Prüfung eines Ereignisses, das älter als sechs Stunden ist, wird beispielsweise die Tabelle SPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE abgefragt. In diesem Fall würde ein Ereignis, das um 10:01 Uhr eintritt, über 10 Minuten aggregiert und entsprechend dem Zeitstempel 10:10 in der Systemtabelle enthalten sein.

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

Abweichung zwischen Diagrammen

Bestimmte Abfrage oder Anfrage-Tag analysieren

Um zu ermitteln, ob eine Abfrage oder ein Anfrage-Tag die Ursache des Problems ist, klicken Sie auf das Abfrage- oder Anfrage-Tag, das scheinbar die höchste Last hat oder länger dauert als die anderen. Sie können mehrere Abfragen und Anfrage-Tags gleichzeitig auswählen.

Halten Sie den Mauszeiger auf dem Diagramm für Abfragen auf der Zeitleiste, um die CPU-Auslastung in Sekunden zu sehen.

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 dem bzw. zu der die Abfrage schlecht abgeschnitten hat.
  • Gab es Spitzen bei der CPU-Auslastung? Sie können das Zeitfenster ändern, um die bisherige CPU-Auslastung für die Abfrage zu untersuchen.
  • Wie hoch ist der Ressourcenverbrauch? In welchem Verhältnis stehen sie zu anderen Suchanfragen? Vergleichen Sie in der Tabelle die Daten anderer Abfragen mit der ausgewählten Abfrage. 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 Anfrage-Tags) aufschlüsseln und sie auf der Seite „Query Details“ (Abfragedetails) weiter analysieren.

Seite „Abfragedetails“ aufrufen

Wenn Sie die Details einer bestimmten Abfrageform oder eines bestimmten Anfrage-Tags in einer grafischen Form anzeigen möchten, klicken Sie auf das mit der Abfrage oder dem Anfrage-Tag verknüpfte FDR. Die Seite "Query Details" (Abfragedetails) wird geöffnet.

Seite mit Abfragedetails

Auf der Seite „Query Details“ (Abfragedetails) werden die folgenden Informationen angezeigt:

  1. Text der Abfragedetails: SQL-Abfragetext, der auf ca. 64 KB gekürzt wurde Statistiken für mehrere Abfragen mit demselben Tag-String werden in einer einzelnen Zeile gruppiert, wobei das REQUEST_TAG mit diesem Tag-String übereinstimmt. In diesem Feld wird nur der Text einer dieser Abfragen angezeigt. Für Batch-DML werden die SQL-Anweisungen in einer einzelnen Zeile vereinfacht und mithilfe eines Semikolon-Trennzeichens verkettet. Aufeinanderfolgende identische SQL-Texte werden vor dem Abschneiden dedupliziert.
  2. Die Werte der folgenden Felder:
    • Ausführungsanzahl: Häufigkeit, mit der Spanner die Abfrage während des Intervalls gesehen hat.
    • Durchschn. CPU (ms): Durchschnittliche CPU-Ressourcennutzung in Millisekunden durch eine Abfrage der CPU-Ressourcen der Instanz in einem Zeitintervall.
    • Durchschn. Latenz (ms): Durchschnittliche Dauer der einzelnen Abfrageausführungen in der Datenbank in Millisekunden. Dieser Durchschnitt schließt die Codierungs- und Übertragungszeit für die Ergebnismenge und den Aufwand aus.
    • Durchschn. zurückgegebene Zeilen: durchschnittliche Anzahl der Zeilen, die die Abfrage zurückgegeben hat.
    • Durchschn. gescannte Zeilen: Durchschnittliche Anzahl der Zeilen, die von der Abfrage gescannt wurden, ohne gelöschte Werte.
    • Durchschn. Bytes: Die Anzahl der Datenbyte, die die Abfrage zurückgegeben hat, ohne den Übertragungsaufwand für die Codierung.
  3. Diagramm mit Beispielen für Abfragepläne: Jeder Punkt im Diagramm stellt einen Stichprobenplan zu einem bestimmten Zeitpunkt und dessen spezifische Abfragelatenz dar. 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 für Abfragen mit partitionTokens, die von der PartitionQuery API abgerufen wurden, und für partitionierte DML-Abfragen nicht unterstützt.
  4. Visualisierung des Abfrageplans: Zeigt den ausgewählten Abfrageplan mit Stichproben an. Jeder Knoten oder jede Karte im Diagramm stellt einen Iteration dar, der Zeilen aus seinen Eingaben verarbeitet und Zeilen für den übergeordneten Knoten erstellt. Klicken Sie auf die einzelnen Iterationen, um erweiterte Informationen zu erhalten.
  5. Abfragelatenzdiagramm: Zeigt den Wert der Abfragelatenz für eine ausgewählte Abfrage über einen bestimmten Zeitraum an. Außerdem wird die durchschnittliche Latenz angezeigt.
  6. CPU-Auslastungsdiagramm: Zeigt die CPU-Auslastung durch eine Abfrage in Prozent über einen Zeitraum an. Außerdem wird die durchschnittliche CPU-Auslastung angezeigt.
  7. Diagramm zur Anzahl der Ausführung/Fehler: Zeigt die Anzahl der Ausführungen einer Abfrage über einen bestimmten Zeitraum und die Anzahl der Fehler bei der Ausführung der Abfrage an.
  8. Gescannte Zeilengrafik: Zeigt die Anzahl der Zeilen an, die die Abfrage in einem bestimmten Zeitraum gescannt hat.
  9. Grafik für zurückgegebene Zeilen: Zeigt die Anzahl der Zeilen an, die die Abfrage über einen bestimmten Zeitraum zurückgegeben hat.
  10. Zeitraumfilter: Filtert Abfragedetails nach Zeitraum, z. B. Stunde, Tag oder einen benutzerdefinierten Bereich.

Für die Grafiken rufen wir die Daten aus der TopN-Abfragestatistiktabelle ab, die drei verschiedene Detaillierungen hat: 1 Min., 10 Min. und 1 Stunde. Der Wert für jeden Datenpunkt in den Diagrammen stellt den Durchschnittswert über ein Intervall von einer Minute dar.