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. Er unterstützt ein intuitives Monitoring und stellt Diagnoseinformationen bereit, mit denen Sie über die Erkennung hinaus die Ursache von Leistungsproblemen ermitteln können.

Mit Query Insights können Sie die Spanner-Abfrageleistung anhand der folgenden Schritte verbessern:

  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. Analysieren Sie die Abfrage oder das Anfrage-Tag, um Probleme zu identifizieren.

Abfragestatistiken sind sowohl für Konfigurationen mit einer Region als auch für multiregionale Konfigurationen verfügbar.

Preise

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

Datenaufbewahrung

Die maximale Aufbewahrungsdauer für Abfragestatistiken beträgt 30 Tage. Für das Diagramm CPU-Auslastung insgesamt (pro Abfrage oder Anfrage-Tag) stammen die Daten aus den SPANNER_SYS.QUERY_STATS_TOP_*-Tabellen mit einer maximalen Aufbewahrungsdauer von 30 Tagen. Weitere Informationen finden Sie unter Datenaufbewahrung.

Erforderliche Rollen

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

Nutzer von Identity and Access Management (IAM)

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für die Instanz zu gewähren, um die erforderlichen Berechtigungen zum Aufrufen der Seite „Query Insights“ zu erhalten:

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

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

Nutzer mit detaillierter Zugriffssteuerung

Wenn Sie mit einer detaillierten Zugriffssteuerung arbeiten, achten Sie auf Folgendes:

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

Weitere Informationen finden Sie unter Detaillierte Zugriffssteuerung und Detaillierte Zugriffssteuerungssystemrollen.

Das Query Insights-Dashboard

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

Zu den Bereichen des Dashboards gehören:

  1. Datenbankliste: Filtert die Abfragelast einer bestimmten Datenbank oder aller Datenbanken.
  2. Zeitraumfilter: Filtert die Abfragelast nach Zeiträumen wie Stunden, Tagen oder einem benutzerdefinierten Bereich.
  3. Diagramm zur CPU-Auslastung insgesamt (Alle Abfragen): Zeigt die aggregierte Last aller Abfragen an.
  4. Diagramm zur 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. Weitere Informationen finden Sie unter Potenziell problematische Abfragen oder Tags identifizieren.

Query Insights-Dashboard

Dashboard-Leistung

Verwenden Sie Abfrageparameter oder Taggen 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. Dies kann dazu führen, dass die Tabelle mit den Top-N-Abfragen und -Tags nicht korrekt geladen wird.

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

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

Gesamte CPU-Auslastung für alle Abfragen

In der Grafik finden Sie Antworten auf folgende Fragen:

  • Welche Datenbank hat die Auslastung? Wählen Sie in der Liste der Datenbanken verschiedene Datenbanken aus, um die Datenbanken mit den höchsten Lasten zu finden. Informationen zu der Datenbank mit der höchsten Auslastung finden Sie auch im Diagramm CPU-Auslastung – gesamt für Datenbanken in der Google Cloud Console.

    Datenbanklast

  • Ist die CPU-Auslastung hoch? Ist eine Spitze oder ein Anstieg im Zeitverlauf zu sehen? Wenn Sie keine hohe CPU-Auslastung sehen, wird das Problem nicht durch Ihre Abfragen verursacht.

  • Wie lange ist die CPU-Auslastung hoch? Ist er in letzter Zeit stark angestiegen oder war er 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 anzuzeigen, in dem die Lastspitzen der Abfrage beobachtet werden. Zoomen Sie heraus, um bis zu einer Woche der Zeitachse anzuzeigen.

Wenn Sie im Diagramm eine Spitze oder eine Erhöhung sehen, die der Gesamt-CPU-Nutzung der Instanz entspricht, ist dies höchstwahrscheinlich auf eine oder teurere Abfragen zurückzuführen. Im nächsten Schritt können Sie die Fehlerbehebung genauer unter die Lupe nehmen und eine potenziell problematische Abfrage oder ein möglicherweise problematisches Anfrage-Tag ermitteln.

Potenziell problematische Suchanfrage oder Anfrage-Tag identifizieren

Sehen Sie sich den Abschnitt zu den Top-N-Abfragen an, um potenziell problematische Abfragen oder Anfrage-Tags zu identifizieren:

Top-N-Abfragen

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

Die Tabelle Top-N-Abfragen bietet einen Überblick über die Abfragen, die während des ausgewählten Zeitfensters die meiste CPU-Kapazität nutzen, sortiert vom höchsten zum niedrigsten Wert. Die Anzahl der Top-N-Abfragen ist auf 100 begrenzt.

Für die Diagramme rufen wir die Daten aus der Top-N-Abfragestatistiktabelle ab, die drei verschiedene Detaillierungsgrade hat: 1 Minute, 10 Minuten und 1 Stunde. Der Wert für jeden Datenpunkt in den Diagrammen steht für den Durchschnittswert über ein Intervall von einer Minute.

Als Best Practice wird empfohlen, SQL-Abfragen Tags hinzuzufügen. Das Tagging von Abfragen hilft Ihnen, Probleme in übergeordneten Konstrukten zu finden, z. B. mit der Geschäftslogik oder einem Mikrodienst.

Tabelle mit 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 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 Wert REQUEST_TAG dem Tag-String entspricht. 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 SQL-Abfrage angezeigt, die auf etwa 64 KB gekürzt wird. Bei Batch-DML werden die SQL-Anweisungen zu einer einzelnen Zeile vereinfacht und mithilfe eines Semikolon-Trennzeichens verkettet. Aufeinanderfolgende identische SQL-Texte werden vor dem Abschneiden dedupliziert.

  • Abfragetyp: Gibt an, ob eine Abfrage vom Typ PARTITIONED_QUERY oder QUERY ist. Eine PARTITIONED_QUERY ist eine Abfrage mit einer partitionToken, die über die PartitionQuery API abgerufen wird. Alle anderen Abfragen und DML-Anweisungen werden durch den Abfragetyp QUERY gekennzeichnet.

  • CPU-Auslastung: CPU-Ressourcenverbrauch 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, angezeigt auf einem horizontalen 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: Anzahl der Male, die Spanner die Abfrage während des Intervalls erkannt hat.

  • Durchschn. Latenz (ms): Durchschnittliche Zeitdauer 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.

  • Durchschn. gescannte Zeilen: Durchschnittliche Anzahl der von der Abfrage gescannten Zeilen ohne gelöschte Werte.

  • Durchschn. zurückgegebene Zeilen: Durchschnittliche Anzahl der Zeilen, die von der Abfrage zurückgegeben wurden

  • Zurückgegebene Byte: Anzahl der Datenbyte, die von der Abfrage zurückgegeben wurden, ohne den Overhead für die Übertragungscodierung.

Mögliche Abweichung zwischen den Grafiken

Möglicherweise bemerken Sie Abweichungen zwischen den Grafiken CPU-Auslastung insgesamt (alle Abfragen) und CPU-Auslastung insgesamt (pro Abfrage oder Anfrage-Tag). Zu diesem Szenario können zwei Dinge führen:

  • Verschiedene Datenquellen: Die Cloud Monitoring-Daten, aus denen das Diagramm zur CPU-Gesamtauslastung (alle Abfragen) gespeist wird, sind in der Regel genauer, da sie jede Minute gesendet werden und eine Aufbewahrungsdauer von 45 Tagen haben. Die Systemtabellendaten, aus denen das Diagramm zur gesamten CPU-Auslastung (pro Abfrage oder Anfrage-Tag) gespeist wird, können über einen Zeitraum von 10 Minuten (oder 1 Stunde) gemittelt werden. In diesem Fall können wir sehr detaillierte Daten verlieren, die wir im Diagramm zur CPU-Gesamtauslastung (alle Abfragen) sehen.

  • Verschiedene Aggregationsfenster: Beide Grafiken haben unterschiedliche Aggregationsfenster. Wenn Sie beispielsweise ein Ereignis untersuchen, das älter als sechs Stunden ist, wird 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 in der Systemtabelle vorhanden sein, die dem Zeitstempel 10:10 entspricht.

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

Varianz zwischen den Diagrammen

Bestimmte Suchanfrage oder Anfrage-Tag analysieren

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

Halten Sie den Mauszeiger im Diagramm für Abfragen auf der Zeitachse gedrückt, um deren CPU-Auslastung (in Sekunden) zu ermitteln.

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, an denen die Abfrage anfänglich eine schlechte Leistung erbracht 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 Zusammenhang stehen sie mit anderen Suchanfragen? Vergleichen Sie in der Tabelle die Daten anderer Abfragen mit der ausgewählten Abfrage. Gibt es einen großen Unterschied?

Um zu bestätigen, dass 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 auf der Seite „Abfragedetails“ weiter analysieren.

Seite "Abfragedetails" aufrufen

Wenn Sie die Details einer bestimmten Abfrageform oder eines bestimmten Anfrage-Tags in einem grafischen Format anzeigen möchten, klicken Sie auf den mit der Abfrage oder dem Anfrage-Tag verknüpften FPrint. Die Seite "Abfragedetails" wird geöffnet.

Seite mit Abfragedetails

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

  1. Text der Abfragedetails: SQL-Abfragetext, gekürzt auf ungefähr 64 KB Statistiken für mehrere Abfragen mit demselben Tag-String 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 Batch-DML werden die SQL-Anweisungen in einer einzelnen Zeile zusammengefasst und mit einem Semikolon als Trennzeichen verkettet. Aufeinanderfolgende identische SQL-Texte werden vor dem Abschneiden dedupliziert.
  2. Die Werte der folgenden Felder:
    • Ausführungsanzahl: Anzahl der Male, die Spanner die Abfrage während des Intervalls gesehen hat.
    • Durchschn. CPU (ms): Durchschnittlicher CPU-Ressourcenverbrauch in Millisekunden durch eine Abfrage der CPU-Ressourcen der Instanz in einem Zeitintervall.
    • 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 und den Aufwand aus.
    • Durchschn. zurückgegebene Zeilen: Durchschnittliche Anzahl der Zeilen, die von der Abfrage zurückgegeben wurden.
    • Durchschn. gescannte Zeilen: Durchschnittliche Anzahl der von der Abfrage gescannten Zeilen ohne gelöschte Werte.
    • Durchschn. Byte: Anzahl der Datenbyte, die von der Abfrage zurückgegeben wurden, ohne den Overhead für die Übertragungscodierung.
  3. Beispieldiagramm für Abfragepläne: Jeder Punkt im Diagramm steht für einen Stichproben-Abfrageplan zu einem bestimmten Zeitpunkt und mit seiner spezifischen 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 für Abfragen mit partitionTokens aus der PartitionQuery API und partitionierten DML-Abfragen nicht unterstützt.
  4. Visualisierung des Abfrageplans: Zeigt den ausgewählten Abfrageplan mit Stichproben an. Jeder Knoten bzw. jede Karte in der Grafik stellt einen Iterator dar, der Zeilen aus seinen Eingaben verwendet und Zeilen für sein übergeordnetes Element erzeugt. Sie können auf die einzelnen Iterationen klicken, um erweiterte Informationen aufzurufen.
  5. Diagramm zur Abfragelatenz: 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 bestimmten Zeitraum an. Außerdem wird die durchschnittliche CPU-Auslastung angezeigt.
  7. Grafik zur Anzahl der Ausführungen/Fehler: Zeigt die Anzahl der Ausführungen einer Abfrage über einen bestimmten Zeitraum sowie die Anzahl der fehlgeschlagenen Abfrageausführungen an.
  8. Diagramm für gescannte Zeilen: Zeigt die Anzahl der Zeilen an, die die Abfrage über einen bestimmten Zeitraum gescannt hat.
  9. Diagramm zu zurückgegebenen Zeilen: Zeigt die Anzahl der Zeilen an, die die Abfrage über einen bestimmten Zeitraum zurückgegeben hat.
  10. Zeitraumfilter: Filtert Abfragedetails nach Zeitbereichen wie Stunde, Tag oder einem benutzerdefinierten Bereich.

Für die Diagramme rufen wir die Daten aus der Top-N-Abfragestatistiktabelle ab, die drei verschiedene Detaillierungsgrade hat: 1 Minute, 10 Minuten und 1 Stunde. Der Wert für jeden Datenpunkt in den Diagrammen steht für den Durchschnittswert über ein Intervall von einer Minute.