Abfrageoptimierung – Übersicht

Auf dieser Seite werden die Spanner-Abfrageoptimierung und ihre Vorteile beschrieben.

Überblick

Die SQL-Abfrageoptimierung von Spanner konvertiert eine deklarative SQL-Anweisung, die beschreibt, welche Daten die Abfrage benötigt, in einen imperativen Ausführungsplan, der eine Möglichkeit zum genauen Abrufen dieser Daten beschreibt. Bei der Umwandlung einer deklarativen Anweisung in einen Abfrageausführungsplan werden Transformationen an Baumstrukturen durchgeführt, die zur Darstellung der Abfrage verwendet werden. Das Optimierungsprogramm behält beim Erstellen eines Ausführungsplans die logische Bedeutung der ursprünglichen SQL-Abfrage bei, sodass die richtigen Zeilen zurückgegeben werden.

Eine weitere wichtige Rolle der Optimierung besteht darin, einen effizienten Ausführungsplan zu erstellen.

Wie erstellt das Spanner-Optimierungstool effiziente Ausführungspläne?

Das Optimierungstool von Spanner verwendet eine Kombination aus etablierter Heuristik und kostenbasierter Optimierung, um effiziente Pläne zu erstellen. Einige Heuristiken sind sehr einfach, z. B. "Filter auf Remote-Maschinen ausführen, anstatt Daten auf den lokalen Computer zu übertragen". Andere Heuristiken sind komplexer, beinhalten aber immer noch das Prinzip der Verschiebungslogik, die das Datenvolumen näher an den Daten reduziert. Dieses Prinzip ist besonders wichtig in einem System, das Daten auf mehreren Computern teilt.

Nicht alle Ausführungsentscheidungen können mit solchen festen Regeln effektiv getroffen werden. Daher trifft das Optimierungstool von Spanner ebenfalls Entscheidungen auf Grundlage der geschätzten Kosten für Alternativen. Solche Kostenschätzungen werden anhand der Struktur der Abfrage, des Schemas der Datenbank und der Schätzungen des Datenvolumens berechnet, das durch Fragmente der Abfrage erzeugt wird. Spanner schätzt beispielsweise, wie viele Zeilen der Tabelle „Songs“ den Filter SongGenre = "Country" qualifizieren, wenn dieser Filter in einer Abfrage angezeigt wird. Zur Berechnung dieser Schätzungen sammelt Spanner regelmäßig Statistiken, um die Verteilung der Daten in einer Datenbank zu charakterisieren.

Darüber hinaus optimiert Spanner die Abfrageausführung, indem automatisch ermittelt wird, ob eine zeilen- oder spaltenorientierte Verarbeitungsmethode für die Abfrage verwendet werden sollte. Weitere Informationen finden Sie unter Optimize-Scans.

Weitere Informationen zu Abfrageausführungsplänen und dazu, wie sie von Spanner zum Ausführen von Abfragen in einer verteilten Umgebung verwendet werden, finden Sie unter Abfrageausführungspläne.

Versionierung des Abfrageoptimierungstools

Im Laufe der Zeit wird die Spanner-Abfrageoptimierung weiterentwickelt, um die Auswahlmöglichkeiten im Abfrageausführungsplan zu erweitern und die Genauigkeit der Schätzungen zu verbessern, die als Grundlage für diese Entscheidungen dienen. Dies führt zu effizienteren Plänen zur Abfrageausführung.

Spanner veröffentlicht Aktualisierungen der Optimierung als neue Versionen der Abfrageoptimierung, um die Effizienz der Abfrageausführungspläne zu verbessern. Weitere Informationen zu den verschiedenen Versionen finden Sie unter Versionen der Spanner-Abfrageoptimierung.

Statistikpakete der Abfrageoptimierung

Spanner verwaltet Statistiken zur Datenverteilung von Tabellenspalten, um besser abschätzen zu können, wie viele Zeilen durch eine Abfrage erzeugt werden. Die Abfrageoptimierung verwendet diese Schätzungen, um den besten Abfrageausführungsplan auszuwählen. Diese Statistiken werden regelmäßig von Spanner aktualisiert. Da die Statistiken zur Auswahl von Abfrageausführungsplänen verwendet werden, kann Spanner bei der Aktualisierung der Statistiken den Abfrageplan ändern, den es für eine Abfrage verwendet.

Standardmäßig verwenden Datenbanken automatisch das neueste generierte Statistikpaket. Sie können Ihre Datenbank an eine frühere Statistikpaketversion anheften. Sie haben auch die Möglichkeit, einzelne Abfragen mit einem anderen Statistikpaket als dem neuesten auszuführen.

Neues Statistikpaket erstellen

Spanner generiert automatisch alle drei Tage neue Statistikpakete. Wenn Sie manuell ein neues Statistikpaket erstellen möchten, verwenden Sie die GoogleSQL-DDL-Anweisung ANALYZE oder die PostgreSQL-DDL-Anweisung ANALYZE.

Nach erheblichen Änderungen an den Daten oder dem Schema Ihrer Datenbank kann das Erstellen eines neuen Statistikpakets die Abfrageleistung verbessern. Es hat sich bewährt, in folgenden Fällen ein neues Statistikpaket zu erstellen:

  • Die Datenbank verarbeitet eine große Anzahl von Einfügungs-, Aktualisierungs- oder Löschvorgängen.
  • Sie fügen der Datenbank einen neuen Index hinzu.
  • Sie fügen einer Tabelle eine neue Spalte hinzu.

Wenn Sie eine ANALYZE-DDL-Anweisung ausführen, wird Ihr Schema aktualisiert und ein Vorgang mit langer Ausführungszeit wird gestartet.

Nachdem Spanner die Ausführung der Anweisung abgeschlossen hat, dauert es bis zu zehn Minuten, bis die Abfrageoptimierung ein neues Statistikpaket in der Abfrageplanung berücksichtigt.

Automatische Speicherbereinigung für Statistikpakete

Statistikpakete in Spanner werden ab ihrer Erstellung 30 Tage lang aufbewahrt. Anschließend unterliegen sie der automatischen Speicherbereinigung.

Die integrierte Spanner-Tabelle INFORMATION_SCHEMA.SPANNER_STATISTICS enthält eine Liste der verfügbaren Statistikpakete. In jeder Zeile dieser Tabelle ist ein Statistikpaket nach Name aufgeführt. Der Name enthält den Zeitstempel der Erstellung des jeweiligen Pakets. Jeder Eintrag enthält außerdem ein Feld namens ALLOW_GC, das definiert, ob ein Paket durch die automatische Speicherbereinigung gelöscht werden kann.

Sie können Ihre gesamte Datenbank an jedes der in dieser Tabelle aufgeführten Pakete anheften. Das angepinnte Statistikpaket wird nicht automatisch bereinigt und der Wert von ALLOW_GC wird ignoriert, solange die Datenbank an dieses Paket angeheftet ist. Wenn Sie ein bestimmtes Statistikpaket für eine einzelne Abfrage verwenden möchten, muss das Paket mit ALLOW_GC=FALSE aufgeführt oder angeheftet sein. Dadurch wird verhindert, dass Abfragen fehlschlagen, nachdem das Statistikpaket bereits automatisch bereinigt wurde. Sie können den Wert von ALLOW_GC mit der DDL-Anweisung ALTER STATISTICS von GoogleSQL oder ALTER STATISTICS von PostgreSQL ändern.

Paketaufbewahrung und personenidentifizierbare Informationen

Ein Statistikpaket enthält gemäß der Standardbranchenpraxis Histogramme der Spaltendaten. Dadurch kann das Abfrageoptimierungstool die optimalen Abfragepläne auswählen. Das Histogramm wird mit einer kleinen Stichprobe von Werten erstellt. Dieses kleine Dataset kann möglicherweise personenidentifizierbare Informationen enthalten.

Spanner erstellt regelmäßig ein neues Statistikpaket und bewahrt es standardmäßig 30 Tage auf. Daher kann eine kleine Stichprobe von aus der Datenbank gelöschten Werten in Statistikhistogrammen weitere 30 Tage lang aufbewahrt werden. Statistikpakete, die mit der Datenbankoption optimizer_statistics_package oder mit der Option ALLOW_GC=FALSE angepinnt sind, werden nicht automatisch bereinigt. Histogramme in diesen Paketen können Werte enthalten, die über einen längeren Zeitraum aus der Datenbank gelöscht wurden. Darüber hinaus ist der Inhalt von Statistikpaketen in Datenbanksicherungen enthalten.

Die Statistiken des Optimierungstools werden genauso wie Nutzerdaten verschlüsselt gespeichert.

Der für diese Pakete erforderliche Gesamtspeicher beträgt in der Regel weniger als 100 MB und wird auf Ihre Gesamtspeicherkosten angerechnet.

Nächste Schritte