Mit der Abfrageplan-Visualisierung können Sie schnell die Struktur des Abfrageplans nachvollziehen, die von Spanner zum Bewerten einer Abfrage ausgewählt wurde. In diesem Leitfaden erfahren Sie, wie Sie mithilfe eines Abfrageplans die Ausführung Ihrer Abfragen besser nachvollziehen können.
Hinweis
Lesen Sie sich die folgenden Informationen durch, um sich mit den in dieser Anleitung genannten Teilen der Google Cloud Console-Benutzeroberfläche vertraut zu machen:
Abfrage in der Google Cloud Console ausführen
- Rufen Sie in der Google Cloud Console die Seite Spanner-Instanzen auf.
-
Wählen Sie den Namen der Instanz aus, die die Datenbank enthält, die Sie abfragen möchten.
In der Google Cloud Console wird die Seite Übersicht der Instanz angezeigt.
-
Wählen Sie den Namen der Datenbank aus, die Sie abfragen möchten.
In der Google Cloud Console wird die Übersichtsseite der Datenbank angezeigt.
-
Klicken Sie im Seitenmenü auf Spanner Studio.
In der Google Cloud Console wird die Seite Spanner Studio der Datenbank angezeigt.
- Geben Sie die SQL-Abfrage in den Editorbereich ein.
-
Klicken Sie auf Ausführen.
Spanner führt die Abfrage aus.
- Klicken Sie auf den Tab Erklärung, um die Abfrageplan-Visualisierung anzuzeigen.
Einführung in den Abfrageeditor
Die Spanner Studio-Seite enthält Abfrage-Tabs, auf denen Sie SQL-Abfrage- und DML-Anweisungen eingeben oder einfügen, diese für Ihre Datenbank ausführen und deren Ergebnisse und Abfrageausführungspläne aufrufen können. Die Schlüsselkomponenten der Spanner Studio-Seite sind im folgenden Screenshot nummeriert.

- In der Tab-Leiste werden die geöffneten Abfrage-Tabs angezeigt. Wenn Sie einen neuen Tab erstellen möchten, klicken Sie auf Neuer Tab.
Die Tableiste enthält auch eine Liste von Abfragevorlagen, die Sie verwenden können, um Abfragen einzufügen, die Informationen zu Datenbankabfragen, Transaktionen, Lesevorgängen und mehr liefern. Weitere Informationen hierzu finden Sie unter Überblick über Tools zur Selbstbeobachtung.
- Die Befehlsleiste des Editors bietet folgende Optionen:
- Der Befehl Ausführen führt die im Bearbeitungsbereich eingegebenen Anweisungen aus und erzeugt Abfrageergebnisse auf dem Tab Ergebnisse und Abfrageausführungspläne auf dem Tab Erklärung. Ändern Sie das Standardverhalten über das Drop-down-Menü, um die Optionen Nur Ergebnisse oder Nur Erklärung zu verwenden.
Wenn Sie etwas im Editor markieren, wird der Befehl Ausführen in Auswahl ausführen geändert, sodass Sie nur das ausführen können, was Sie ausgewählt haben.
- Mit dem Befehl Abfrage löschen wird der gesamte Text im Editor gelöscht und die Untertabs Ergebnisse und Erläuterung werden geleert.
- Mit dem Befehl Abfrage formatieren werden Anweisungen im Editor so formatiert, dass sie leichter zu lesen sind.
- Mit dem Befehl Tastenkombinationen werden die Tastenkombinationen angezeigt, die Sie im Editor verwenden können.
- Über den Link Hilfe zu SQL-Abfragen wird ein Browsertab mit der Dokumentation zur SQL-Abfragesyntax geöffnet.
Abfragen werden jedes Mal automatisch validiert, wenn sie im Editor aktualisiert werden. Wenn die Anweisungen gültig sind, wird in der Befehlsleiste des Editors ein Bestätigungshäkchen und die Meldung Gültig angezeigt. Falls Probleme auftreten, wird eine Fehlermeldung mit Details angezeigt.
- Der Befehl Ausführen führt die im Bearbeitungsbereich eingegebenen Anweisungen aus und erzeugt Abfrageergebnisse auf dem Tab Ergebnisse und Abfrageausführungspläne auf dem Tab Erklärung. Ändern Sie das Standardverhalten über das Drop-down-Menü, um die Optionen Nur Ergebnisse oder Nur Erklärung zu verwenden.
- Im Editor geben Sie SQL-Abfragen und DML-Anweisungen ein.
Sie sind farblich gekennzeichnet und für mehrzeilige Anweisungen werden automatisch Zeilennummern hinzugefügt.
Wenn Sie mehr als eine Anweisung im Editor eingeben, müssen Sie nach jeder Anweisung ein abschließendes Semikolon verwenden, mit Ausnahme der letzten.
- Der untere Bereich eines Abfragetabs enthält drei Untertabs:
- Auf dem Untertab Schema werden die Tabellen in der Datenbank und ihre Schemas angezeigt. Sie können sie als Kurzübersicht verwenden, wenn Sie im Editor Anweisungen verfassen.
- Auf dem Untertab Ergebnisse werden die Ergebnisse angezeigt, die beim Ausführen der Anweisungen im Editor zurückgegeben werden. Bei Abfragen wird eine Ergebnistabelle angezeigt. Bei DML-Anweisungen wie
INSERT
und >UPDATE
wird eine Meldung mit der Anzahl der betroffenen Zeilen angezeigt. - Auf dem Untertab Erklärung werden visuelle Grafiken der Abfragepläne angezeigt, die beim Ausführen der Anweisungen im Editor erstellt werden.
- Die Untertabs Ergebnisse und Erklärung bieten beide eine Anweisungsauswahl, mit der Sie die Anweisung auswählen können, deren Ergebnisse oder Abfrageplan Sie aufrufen möchten.
Stichproben für Abfragepläne ansehen
- Rufen Sie in der Google Cloud Console die Seite Spanner-Instanzen auf.
-
Klicken Sie auf den Namen der Instanz mit den Abfragen, die Sie untersuchen möchten.
In der Google Cloud Console wird die Seite Übersicht der Instanz angezeigt.
-
Klicken Sie im Navigationsmenü unter der Überschrift „Observability“ (Sichtbarkeit) auf Query insights (Statistiken abfragen).
In der Google Cloud Console wird die Seite Abfragestatistiken der Instanz angezeigt.
-
Wählen Sie im Drop-down-Menü Datenbank die Datenbank mit den Abfragen aus, die Sie untersuchen möchten.
In der Google Cloud Console werden die Informationen zur Abfragelast für die Datenbank angezeigt. In der Tabelle „Top-N-Abfragen und -Anfrage-Tags“ sehen Sie eine Liste der Top-Abfragen und -Anfrage-Tags, sortiert nach CPU-Auslastung.
-
Suchen Sie die Abfrage mit hoher CPU-Auslastung, für die Sie Stichproben von Abfrageplänen ansehen möchten. Klicken Sie auf den FPRINT-Wert dieser Abfrage.
Auf der Seite Abfragedetails wird ein Diagramm Abfrageplan-Beispiele für Ihre Abfrage im Zeitverlauf angezeigt. Sie können herauszoomen, um bis zu sieben Tage vor der aktuellen Zeit zu sehen. Hinweis: Abfragepläne werden nicht für Abfragen mit Partitionstokens unterstützt, die über die PartitionQuery API abgerufen wurden, und für Abfragen mit partitionierter DML.
-
Klicken Sie auf einen der Punkte in der Grafik, um einen älteren Abfrageplan aufzurufen und die Schritte während der Abfrageausführung zu visualisieren. Sie können auch auf einen beliebigen Betreiber klicken, um erweiterte Informationen zu erhalten.
Abbildung 8: Diagramm „Beispiele für Abfragepläne“
In einigen Fällen kann es sinnvoll sein, sich stichprobenartige Abfragepläne anzusehen und die Leistung einer Abfrage im Zeitverlauf zu vergleichen. Bei Abfragen mit hoher CPU-Auslastung speichert Spanner Stichproben von Abfrageplänen 30 Tage lang auf der Seite Abfragestatistiken in der Google Cloud Console. So rufen Sie Beispiele für Abfragepläne auf:
Einführung in die Abfrageplan-Visualisierung
Die Schlüsselkomponenten der Visualisierung sind im folgenden Screenshot annotiert und ausführlicher beschrieben. Nachdem Sie eine Abfrage auf einem Abfragetab ausgeführt haben, wählen Sie den Tab ERKLÄRUNG unter dem Abfrageeditor aus, um die Visualisierung des Abfrageausführungsplans zu öffnen.
Der Datenfluss im folgenden Diagramm ist von unten nach oben, d. h. alle Tabellen und Indexe befinden sich unten im Diagramm und die endgültige Ausgabe oben.



Jeder Knoten oder jede Karte im Graph stellt einen Iterator dar und enthält die folgenden Informationen:
- Der Name des Iterators. Ein Iterator liest Zeilen aus seiner Eingabe und erzeugt Zeilen.
- Laufzeitstatistiken, aus denen hervorgeht, wie viele Zeilen zurückgegeben wurden, wie hoch die Latenz war und wie viel CPU verbraucht wurde.
- Anhand der folgenden visuellen Hinweise können Sie potenzielle Probleme im Abfrageausführungsplan erkennen.
- Rote Balken in einem Knoten sind visuelle Indikatoren für den Prozentsatz der Latenz oder CPU-Zeit für diesen Iterator im Vergleich zum Gesamtwert für die Abfrage.
- Die Dicke der Linien, die die einzelnen Knoten verbinden, entspricht der Zeilenanzahl. Je dicker die Linie, desto größer ist die Anzahl der Zeilen, die an den nächsten Knoten übergeben werden. Die tatsächliche Anzahl der Zeilen wird auf jeder Karte und wenn Sie den Mauszeiger auf einen Anschluss bewegen, angezeigt.
- An einem Knoten, an dem ein vollständiger Tabellenscan durchgeführt wurde, wird ein Warndreieck angezeigt. Weitere Informationen im Infofeld umfassen Empfehlungen wie das Hinzufügen eines Index oder die Überarbeitung der Abfrage oder des Schemas, um nach Möglichkeit einen vollständigen Scan zu vermeiden.
- Wählen Sie eine Karte im Plan aus, um Details im Informationsfenster auf der rechten Seite aufzurufen (5).
- Iterator-Informationen enthalten Details sowie Laufzeitstatistiken für die Iterator-Karte, die Sie im Graph ausgewählt haben.
- Die Abfragezusammenfassung enthält Details zur Anzahl der zurückgegebenen Zeilen und zur Ausführungszeit der Abfrage. Hervorgehobene Operatoren sind solche, die eine erhebliche Latenz aufweisen, eine erhebliche Menge an CPU im Vergleich zu anderen Operatoren verbrauchen und eine erhebliche Anzahl von Datenzeilen zurückgeben.
- Die Zeitachse der Abfrageausführung ist ein zeitbasierter Graph, der zeigt, wie lange jede Maschinengruppe ihren Teil der Abfrage ausgeführt hat. Es kann sein, dass eine Maschinengruppe nicht unbedingt für die gesamte Dauer der Abfrage ausgeführt wird. Es ist auch möglich, dass eine Maschinengruppe während der Ausführung der Abfrage mehrmals ausgeführt wurde. Die Zeitachse zeigt hier jedoch nur den Beginn der ersten Ausführung und das Ende der letzten Ausführung an.
Abfrage mit geringer Leistung optimieren
Angenommen, Ihr Unternehmen betreibt eine Online-Filmdatenbank mit Informationen zu Filmen wie Besetzung, Produktionsfirmen und Filmdetails. Der Dienst wird auf Spanner ausgeführt, es gab jedoch in letzter Zeit einige Leistungsprobleme.
Als leitender Entwickler des Dienstes werden Sie gebeten, diese Leistungsprobleme zu untersuchen, da sie zu schlechten Bewertungen für den Dienst führen. Öffnen Sie die Google Cloud Console, rufen Sie Ihre Datenbankinstanz auf und öffnen Sie dann den Abfrageeditor. Sie geben die folgende Abfrage in den Editor ein und führen sie aus.
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note HAVING MIN t.production_year) AS note
FROM
title AS t
JOIN
movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
Das Ergebnis dieser Abfrage ist im folgenden Screenshot zu sehen. Wir haben die Abfrage im Editor formatiert, indem wir ABFRAGE FORMATIEREN ausgewählt haben. Oben rechts auf dem Bildschirm wird außerdem angezeigt, dass die Abfrage gültig ist.

Auf dem Tab ERGEBNISSE unterhalb des Abfrageeditors sehen Sie, dass die Abfrage in etwas mehr als zwei Minuten abgeschlossen wurde. Sie möchten die Abfrage genauer untersuchen, um festzustellen, ob sie effizient ist.
Langsame Abfrage mit der Abfrageplan-Visualisierung analysieren
An dieser Stelle wissen wir, dass die Abfrage im vorherigen Schritt mehr als zwei Minuten dauert, wir wissen jedoch nicht, ob die Abfrage so effizient wie möglich ist und ob diese Dauer daher erwartbar ist.
Wählen Sie den Tab ERKLÄRUNG direkt unter dem Abfrageeditor aus, um eine visuelle Darstellung des Ausführungsplans aufzurufen, den Spanner zum Ausführen der Abfrage und Zurückgeben der Ergebnisse erstellt hat.
Der Plan im folgenden Screenshot ist relativ groß, aber selbst bei dieser Zoomstufe können Sie die folgenden Beobachtungen machen.
In der Abfrageübersicht im Infobereich auf der rechten Seite sehen wir, dass fast 3 Millionen Zeilen gescannt und letztendlich weniger als 64.000 zurückgegeben wurden.
Im Bereich Zeitachse der Abfrageausführung sehen wir außerdem, dass an der Abfrage vier Maschinengruppen beteiligt waren. Eine Maschinengruppe ist für die Ausführung eines Teils der Abfrage verantwortlich. Operatoren können auf einer oder mehreren Maschinen ausgeführt werden. Wenn Sie eine Maschinengruppe in der Zeitachse auswählen, wird im visuellen Plan hervorgehoben, welcher Teil der Abfrage für diese Gruppe ausgeführt wurde.

Aufgrund dieser Faktoren entscheiden Sie, dass eine Leistungsverbesserung möglich ist, indem Sie den Join von einem Apply-Join, der von Spanner standardmäßig ausgewählt wurde, zu einem Hash-Join ändern.
Abfrage optimieren
Um die Leistung der Abfrage zu verbessern, ändern Sie mit einem Join-Hinweis die Join-Methode in einen Hash-Join. Bei dieser Join-Implementierung wird eine setbasierte Verarbeitung ausgeführt.
Hier ist die aktualisierte Abfrage:
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note HAVING MIN t.production_year) AS note
FROM
title AS t
JOIN
@{join_method=hash_join} movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
Der folgende Screenshot zeigt die aktualisierte Abfrage. Wie im Screenshot zu sehen, wurde die Abfrage in weniger als 5 Sekunden abgeschlossen. Das ist eine deutliche Verbesserung gegenüber den 120 Sekunden vor dieser Änderung.

Sehen wir uns den neuen visuellen Plan an, der im folgenden Diagramm dargestellt ist, um zu erfahren, was er uns über diese Verbesserung verrät.

Sie können augenblicklich einige Unterschiede bemerken:
An dieser Abfrageausführung war nur eine Maschinengruppe beteiligt.
Die Anzahl der Aggregationen wurde drastisch reduziert.
Fazit
In diesem Szenario haben wir eine langsame Abfrage ausgeführt und den visuellen Plan untersucht, um nach Ineffizienzen zu suchen. Im Folgenden finden Sie eine Zusammenfassung der Abfragen und Pläne vor und nach den Änderungen. Auf jedem Tab sind die ausgeführte Abfrage und eine kompakte Ansicht der vollständigen Visualisierung des Abfrageausführungsplans zu sehen.
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note
HAVING
MIN t.production_year) AS note
FROM
title AS t
JOIN
movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;

SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note
HAVING
MIN t.production_year) AS note
FROM
title AS t
JOIN
@{join_method=hash_join} movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;

Ein Indikator dafür, dass in diesem Szenario etwas verbessert werden könnte, war, dass ein großer Anteil der Zeilen aus der Tabelle Titel den Filter LIKE
'% the %'
qualifiziert hat. Die Suche in einer anderen Tabelle mit so vielen Zeilen ist wahrscheinlich teuer. Durch das Ändern unserer Join-Implementierung in einen Hash-Join wurde die Leistung erheblich verbessert.
Nächste Schritte
Die vollständige Abfrageplanreferenz finden Sie unter Abfrageausführungspläne.
Eine vollständige Operatorreferenz finden Sie unter Abfrageausführungsoperatoren.