Abfrageoptimierung – Übersicht

Auf dieser Seite wird der Spanner-Abfrageoptimierer und seine Vorteile beschrieben. Der Abfrageoptimierer ist für Datenbanken mit Google SQL- und PostgreSQL-Dialekt verfügbar.

Übersicht

Das SQL-Abfrageoptimierungstool von Spanner wandelt eine deklarative SQL-Anweisung, die die von der Abfrage gewünschten Daten beschreibt, in einen zwingenden Ausführungsplan um, der eine Möglichkeit zum genauen Abrufen dieser Daten beschreibt. Die Umwandlung einer deklarativen Anweisung in einen Abfrageausführungsplan umfasst die Durchführung von Transformationen in Baumstrukturen, 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 Aufgabe des Optimierers ist die Erstellung eines effizienten Ausführungsplans.

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

Das Spanner-Optimierungstool nutzt eine Kombination aus bewährter Heuristik und kostenbasierter Optimierung, um effiziente Pläne zu erstellen. Einige Heuristiken sind sehr unkompliziert, z. B. „Filter auf Remote-Computern 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 mehrere Computer teilt.

Nicht alle Ausführungsentscheidungen können mit solchen festen Regeln effektiv getroffen werden. Daher trifft das Optimierungsprogramm von Spanner auch Entscheidungen auf der Grundlage geschätzter 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 vorkommt. Zur Berechnung solcher Schätzungen erfasst Spanner regelmäßig Statistiken, um die Verteilung der Daten in einer Datenbank zu charakterisieren.

Außerdem optimiert Spanner die Abfrageausführung, indem automatisch ermittelt wird, ob für die Abfrage eine zeilen- oder spaltenorientierte Verarbeitungsmethode verwendet werden soll. Weitere Informationen finden Sie unter Scans optimieren.

Weitere Informationen zu Abfrageausführungsplänen und ihrer Verwendung durch Spanner für Abfragen in einer verteilten Umgebung finden Sie unter Abfrageausführungspläne.

Versionierung des Abfrageoptimierungstools

Im Laufe der Zeit wird sich das Spanner-Abfrageoptimierungstool weiterentwickeln, wodurch die Auswahlmöglichkeiten im Abfrageausführungsplan erweitert werden und die Genauigkeit der Schätzungen, die auf diesen Entscheidungen basieren, verbessert wird. Dies führt zu effizienteren Abfrageausführungsplänen.

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

Statistikpakete der Abfrageoptimierung

Spanner erfasst Statistiken zur Datenverteilung von Tabellenspalten, um festzustellen, wie viele Zeilen von einer Abfrage generiert werden. Das Abfrageoptimierungstool verwendet diese Schätzungen, damit die Wahl des besten Abfrageausführungsplans erleichtert wird. Diese Statistiken werden regelmäßig von Spanner aktualisiert. Da die Statistiken verwendet werden, um Abfrageausführungspläne auszuwählen, kann Spanner beim Aktualisieren der Statistiken den Abfrageplan ändern, der für eine Abfrage verwendet wird.

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 alle drei Tage automatisch neue Statistikpakete. Wenn Sie ein neues Statistikpaket manuell erstellen möchten, verwenden Sie die DDL-Anweisung ANALYZE von GoogleSQL oder die DDL-Anweisung ANALYZE von PostgreSQL.

Nach erheblichen Änderungen an den Daten oder dem Schema Ihrer Datenbank kann die Erstellung eines neuen Statistikpakets die Abfrageleistung verbessern. Erstellen Sie als Best Practice ein neues Statistikpaket, wenn Folgendes eintritt:

  • In der Datenbank werden viele Einfügungen, Aktualisierungen oder Löschungen verarbeitet.
  • 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, ein Vorgang mit langer Ausführungszeit wird eingeleitet und das Erstellen automatisch ausgelöster Statistiken wird abgebrochen.

Nach Abschluss der Ausführung der Anweisung durch Spanner dauert es bis zu zehn Minuten, bis das Abfrageoptimierungstool ein neues Statistikpaket in die Abfrageplanung einbezieht.

Automatische Speicherbereinigung für Statistikpakete

Statistikpakete in Spanner werden nach ihrer Erstellung 30 Tage lang aufbewahrt. Danach erfolgt eine automatische Speicherbereinigung.

Die in Spanner integrierte 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 automatisch bereinigt wurde. Sie können den Wert von ALLOW_GC mit der GoogleSQL-DDL-Anweisung ALTER STATISTICS oder der PostgreSQL-DDL-Anweisung ALTER STATISTICS ä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 speichert es standardmäßig 30 Tage. Somit kann eine kleine Stichprobe von Werten, die aus der Datenbank gelöscht wurden, für weitere 30 Tage in Statistikhistogrammen aufbewahrt werden. Statistiken, die mit der Datenbankoption optimizer_statistics_package angeheftet sind, oder Pakete mit der Option ALLOW_GC=FALSE werden nicht automatisch bereinigt. Histogramme in diesen Paketen können Werte enthalten, die für einen längeren Zeitraum aus der Datenbank gelöscht wurden. Darüber hinaus ist der Inhalt der Statistikpakete in Datenbanksicherungen enthalten.

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

Die Gesamtspeicherkapazität für diese Pakete beträgt normalerweise weniger als 100 MB und wird auf Ihre Gesamtspeicherkosten angerechnet.

Nächste Schritte