Überblick über die Verwaltung von Aurora SQL Postgre-Abfrageplänen - Amazon Aurora

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Überblick über die Verwaltung von Aurora SQL Postgre-Abfrageplänen

Das Aurora SQL Postgre-Abfrageplanmanagement wurde entwickelt, um die Planstabilität unabhängig von Änderungen an der Datenbank zu gewährleisten, die zu einer Regression des Abfrageplans führen könnten. Eine Regression des Abfrageplans tritt auf, wenn der Optimierer nach System- oder Datenbankänderungen einen suboptimalen Plan für eine bestimmte SQL Anweisung auswählt. Änderungen an Statistiken, Einschränkungen, Umgebungseinstellungen, Bindungen von Abfrageparametern und Upgrades der SQL Postgre-Datenbank-Engine können allesamt zu einer Planregression führen.

Mit der Aurora SQL Postgre-Abfrageplanverwaltung können Sie steuern, wie und wann sich die Pläne zur Abfrageausführung ändern. Zu den Vorteilen der Verwaltung von Aurora SQL Postgre-Abfrageplänen gehören die folgenden.

  • Verbesserung der Planstabilität, indem der Optimierer zur Auswahl aus einer kleinen Anzahl bekannter, bewährter Pläne gezwungen wird.

  • Zentrale Optimierung von Plänen, gefolgt von einer globalen Verteilung der besten Pläne.

  • Ermittlung von nicht verwendeten Indizes und Bewertung der Auswirkungen einer Indexerstellung oder -löschung.

  • Automatische Erkennung eines vom Optimierer ermittelten Minimalkostenplans.

  • Test neuer Optimierer-Funktionen mit geringerem Risiko, da Sie nur die Planänderungen genehmigen können, die zu Performance-Steigerungen führen.

Sie können die von der Abfrageplanverwaltung bereitgestellten Tools proaktiv verwenden, um den besten Plan für bestimmte Abfragen festzulegen. Sie können die Abfrageplanverwaltung auch verwenden, um auf sich ändernde Umstände zu reagieren und Planregressionen zu vermeiden. Weitere Informationen finden Sie unter Bewährte Methoden für die Aurora-PostgreSQL-Abfrageplanverwaltung.

Unterstützte Aussagen SQL

Die Abfrageplanverwaltung unterstützt die folgenden Arten von SQL Anweisungen.

  • JedeSELECT, INSERTUPDATE, oder DELETE Anweisung, unabhängig von ihrer Komplexität.

  • Vorbereitete Anweisungen. Weitere Informationen finden Sie PREPAREin der SQL Postgre-Dokumentation.

  • Dynamische Anweisungen, einschließlich solcher, die im Sofortmodus ausgeführt werden. Weitere Informationen finden Sie unter Dynamic SQL und EXECUTEIMMEDIATEin der Postgre-Dokumentation. SQL

  • Eingebettete SQL Befehle und Anweisungen. Weitere Informationen finden Sie unter Eingebettete SQL Befehle in der SQL Postgre-Dokumentation.

  • Anweisungen innerhalb benannter Funktionen. Weitere Informationen finden Sie CREATEFUNCTIONin der Postgre-Dokumentation. SQL

  • Anweisungen, die temporäre Tabellen enthalten.

  • Anweisungen innerhalb von Prozeduren und DO-Blöcken.

Sie können die Abfrageplanverwaltung mit EXPLAIN im manuellen Modus verwenden, um einen Plan zu erfassen, ohne ihn tatsächlich auszuführen. Weitere Informationen finden Sie unter Analysieren des vom Optimierer ausgewählten Plans. Weitere Informationen zu den Modi der Abfrageplanverwaltung (manuell, automatisch) finden Sie unter Erfassung von Aurora PostgreSQL-Ausführungsplänen.

Die Aurora SQL Postgre-Abfrageplanverwaltung unterstützt alle Funktionen der SQL Postgre-Sprache, einschließlich partitionierter Tabellen, Vererbung, Sicherheit auf Zeilenebene und rekursive allgemeine Tabellenausdrücke (). CTEs Weitere Informationen zu diesen Funktionen der SQL Postgre-Sprache finden Sie unter Tabellenpartitionierung, Zeilensicherheitsrichtlinien und WITHAbfragen (Allgemeine Tabellenausdrücke) und anderen Themen in der Postgre-Dokumentation. SQL

Informationen zu den verschiedenen Versionen der Aurora SQL Postgre-Abfrageplanverwaltungsfunktion finden Sie in den Versionshinweisen für Aurora Postgre unter Versionen der Aurora Postgre-Erweiterung SQL apg_plan_mgmt. SQL

Einschränkungen der Abfrageplanverwaltung

Die aktuelle Version von Aurora Postgre SQL Query Plan Management hat die folgenden Einschränkungen.

  • Pläne werden nicht für Anweisungen erfasst, die auf Systembeziehungen verweisen – Anweisungen, die auf Systembeziehungen verweisen, wie z. B. pg_class, werden nicht erfasst. Dies ist beabsichtigt, um zu verhindern, dass eine große Anzahl von systemgenerierten Plänen, die intern verwendet werden, erfasst werden. Dies gilt auch für Systemtabellen innerhalb von Ansichten.

  • Für Ihren Aurora Postgre-DB-Cluster ist möglicherweise eine größere SQL DB-Instance-Klasse erforderlich — Je nach Arbeitslast benötigt das Abfrageplanmanagement möglicherweise eine DB-Instance-Klasse mit mehr als 2. vCPUs Die Anzahl von max_worker_processes ist durch die Größe der DB-Instance-Klasse begrenzt. Die von einer CPU 2-V-DB-Instance-Klasse (z. B. db.t3.medium) max_worker_processes bereitgestellte Anzahl reicht für einen bestimmten Workload möglicherweise nicht aus. Wir empfehlen Ihnen, eine DB-Instance-Klasse mit mehr als 2 vCPUs für Ihren Aurora SQL Postgre-DB-Cluster zu wählen, wenn Sie die Abfrageplanverwaltung verwenden.

    Wenn die DB-Instance-Klasse Ihre Workload nicht unterstützen kann, gibt die Abfrageplanverwaltung eine Fehlermeldung wie die folgende aus.

    WARNING: could not register plan insert background process HINT: You may need to increase max_worker_processes.

    In diesem Fall sollten Sie Ihren Aurora SQL Postgre-DB-Cluster auf eine DB-Instance-Klassengröße mit mehr Speicher hochskalieren. Weitere Informationen finden Sie unter Unterstützte DB-Engines für DB-Instance-Klassen.

  • Pläne, die bereits in Sitzungen gespeichert sind, sind nicht betroffen. – Die Abfrageplanverwaltung bietet eine Möglichkeit, Abfragepläne zu beeinflussen, ohne den Anwendungscode ändern zu müssen. Wenn jedoch ein generischer Plan bereits in einer vorhandenen Sitzung gespeichert ist und Sie den Abfrageplan ändern möchten, müssen Sie zunächst plan_cache_mode in der DB-Cluster-Parametergruppe auf force_custom_plan setzen.

  • queryid in apg_plan_mgmt.dba_plans und pg_stat_statements kann in folgenden Fällen abweichen:

    • Objekte werden nach dem Speichern in apg_plan_mgmt.dba_plans gelöscht und neu erstellt.

    • Die Tabelle apg_plan_mgmt.plans wird aus einem anderen Cluster importiert.

Informationen zu den verschiedenen Versionen der Aurora SQL Postgre-Abfrageplanverwaltungsfunktion finden Sie in den Versionshinweisen für Aurora Postgre unter Versionen der Aurora Postgre-Erweiterung SQL apg_plan_mgmt. SQL

Terminologie der Abfrageplanverwaltung

Die folgenden Begriffe werden in diesem Thema verwendet.

verwaltete Anweisung

Eine SQL Anweisung, die vom Optimierer unter Abfrageplanverwaltung erfasst wurde. Eine verwaltete Anweisung verfügt über einen oder mehrere Abfrageausführungspläne, die in der apg_plan_mgmt.dba_plans-Ansicht gespeichert sind.

Plan-Baseline

Die Menge der genehmigten Pläne für eine bestimmte verwaltete Anweisung. Das heißt, alle Pläne für die verwaltete Anweisung, für die in der status-Spalte der dba_plan-Ansicht „Approved“ angegeben ist.

Planverlauf

Die Menge der erfassten Pläne für eine bestimmte verwaltete Anweisung. Der Planverlauf enthält alle Pläne, die für die Anweisung erfasst wurden, unabhängig vom Status.

Abfrageplanregression

Der Fall, dass der Optimierer einen weniger optimalen Plan auswählt als vor einer bestimmten Änderung an der Datenbankumgebung, z. B. einer neuen SQL Postgre-Version oder Änderungen an Statistiken.

Versionen der Aurora SQL Postgre-Abfrageplanverwaltung

Die Verwaltung von Abfrageplänen wird von allen derzeit verfügbaren Aurora SQL Postgre-Versionen unterstützt. Weitere Informationen finden Sie in der Liste der Amazon Aurora SQL Postgre-Updates in den Versionshinweisen für Aurora SQL Postgre.

Funktionen zur Verwaltung von Abfrageplänen werden Ihrem Aurora SQL Postgre-DB-Cluster hinzugefügt, wenn Sie die apg_plan_mgmt Erweiterung installieren. Verschiedene Versionen von Aurora Postgre SQL unterstützen verschiedene Versionen der apg_plan_mgmt Erweiterung. Wir empfehlen Ihnen, die Erweiterung zur Verwaltung von Abfrageplänen auf die neueste Version für Ihre Version von Aurora Postgre SQL zu aktualisieren.

Anmerkung

Versionshinweise für die einzelnen apg_plan_mgmt Erweiterungsversionen finden Sie unter Aurora Postgre SQL apg_plan_mgmt extension versions in den Versionshinweisen für Aurora Postgre. SQL

Sie können die auf Ihrem Cluster ausgeführte Version identifizieren, indem Sie mit psql eine Verbindung mit einer Instance herstellen und den Metabefehl \dx verwenden, um Erweiterungen aufzulisten, wie nachfolgend gezeigt.

labdb=> \dx List of installed extensions Name | Version | Schema | Description ---------------+---------+---------------+------------------------------------------------------------------- apg_plan_mgmt | 1.0 | apg_plan_mgmt | Amazon Aurora with PostgreSQL compatibility Query Plan Management plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language (2 rows)

Die Ausgabe zeigt, dass dieser Cluster die Version 1.0 der Erweiterung verwendet. Für eine bestimmte Aurora SQL Postgre-Version sind nur bestimmte apg_plan_mgmt Versionen verfügbar. In einigen Fällen müssen Sie möglicherweise den Aurora SQL Postgre-DB-Cluster auf eine neue Nebenversion aktualisieren oder einen Patch anwenden, damit Sie auf die neueste Version von Query Plan Management aktualisieren können. Die in der Ausgabe gezeigte apg_plan_mgmt Version 1.0 stammt aus einem Aurora Postgre-DB-Cluster der SQL Version 10.17, für den keine neuere Version von apg_plan_mgmt verfügbar ist. In diesem Fall sollte der Aurora SQL Postgre-DB-Cluster auf eine neuere Version von SQL Postgre aktualisiert werden.

Weitere Informationen zum Upgrade Ihres Aurora SQL Postgre-DB-Clusters auf eine neue Version von Postgre SQL finden Sie unter. Amazon Aurora Postgre-Aktualisierungen SQL

Informationen zum Upgrade der apg_plan_mgmt-Erweiterung finden Sie unter Aktualisierung der Verwaltung von Aurora SQL Postgre-Abfrageplänen.

Aurora SQL Postgre-Abfrageplanverwaltung aktivieren

Die Einrichtung der Abfrageplanverwaltung für Ihren Aurora SQL Postgre-DB-Cluster umfasst die Installation einer Erweiterung und die Änderung mehrerer DB-Cluster-Parametereinstellungen. Sie benötigen rds_superuser Berechtigungen, um die apg_plan_mgmt Erweiterung zu installieren und die Funktion für den Aurora SQL Postgre-DB-Cluster zu aktivieren.

Durch die Installation der Erweiterung wird eine neue Rolle, apg_plan_mgmt, erstellt. Diese Rolle ermöglicht Datenbankbenutzern, Abfragepläne anzuzeigen, zu verwalten und zu pflegen. Als Administrator mit rds_superuser-Berechtigungen müssen Sie die apg_plan_mgmt-Rolle Datenbankbenutzern nach Bedarf zuweisen.

Nur Benutzer mit der rds_superuser-Rolle können den folgenden Vorgang ausführen. rds_superuser ist erforderlich, um die Erweiterung apg_plan_mgmt und die zugehörige Rolle apg_plan_mgmt zu erstellen. Benutzer benötigen die Rolle apg_plan_mgmt zur Verwaltung der Erweiterung apg_plan_mgmt.

So aktivieren Sie die Abfrageplanverwaltung für Ihren Aurora SQL Postgre-DB-Cluster

Mit den folgenden Schritten wird die Abfrageplanverwaltung für alle SQL Kontoauszüge aktiviert, die an den Aurora SQL Postgre-DB-Cluster übermittelt werden. Dies wird als automatischer Modus bezeichnet. Weitere Informationen zum Unterschied zwischen den Modi finden Sie unter Erfassung von Aurora PostgreSQL-Ausführungsplänen.

  1. Öffnen Sie die RDS Amazon-Konsole unter https://console.aws.amazon.com/rds/.

  2. Erstellen Sie eine benutzerdefinierte DB-Cluster-Parametergruppe für Ihren Aurora SQL Postgre-DB-Cluster. Sie müssen bestimmte Parameter ändern, um die Abfrageplanverwaltung zu aktivieren und ihr Verhalten festzulegen. Weitere Informationen finden Sie unter Erstellen einer DB-Parametergruppe in Amazon Aurora.

  3. Öffnen Sie die benutzerdefinierte DB-Cluster-Parametergruppe und legen Sie den rds.enable_plan_management-Parameter auf 1 fest, wie in der folgenden Abbildung gezeigt.

    Bild der DB-Cluster-Parametergruppe.

    Weitere Informationen finden Sie unter Ändern von Parametern in einer DB-Cluster-Parametergruppe in Amazon Aurora.

  4. Erstellen Sie eine benutzerdefinierte DB-Parametergruppe, mit der Sie Abfrageplanparameter auf Instance-Ebene festlegen können. Weitere Informationen finden Sie unter Eine DB-Cluster-Parametergruppe in Amazon Aurora erstellen.

  5. Ändern Sie die Writer-Instance des Aurora SQL Postgre-DB-Clusters so, dass sie die benutzerdefinierte DB-Parametergruppe verwendet. Weitere Informationen finden Sie unter Ändern einer DB-Instance in einem DB-Cluster.

  6. Ändern Sie den Aurora SQL Postgre-DB-Cluster so, dass er die benutzerdefinierte DB-Cluster-Parametergruppe verwendet. Weitere Informationen finden Sie unter Ändern des DB-Clusters mithilfe der KonsoleCLI, und API.

  7. Starten Sie Ihre DB-Instance neu, um die Einstellungen der benutzerdefinierten Parametergruppe zu aktivieren.

  8. Stellen Sie mit psql oder pgAdmin Connect zum SQL DB-Instance-Endpunkt Ihres Aurora Postgre-DB-Clusters her. Im folgenden Beispiel wird das postgres-Standardkonto für die rds_superuser-Rolle verwendet.

    psql --host=cluster-instance-1.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=my-db
  9. Erstellen Sie die apg_plan_mgmt-Erweiterung für Ihre DB-Instance, wie nachfolgend gezeigt.

    labdb=> CREATE EXTENSION apg_plan_mgmt; CREATE EXTENSION
    Tipp

    Installieren Sie die apg_plan_mgmt-Erweiterung in der Vorlagendatenbank für Ihre Anwendung. Der Name der Standard-Vorlagendatenbank lautet template1. Weitere Informationen finden Sie unter Template-Datenbanken in der Postgre-Dokumentation. SQL

  10. Ändern Sie den Parameter apg_plan_mgmt.capture_plan_baselines in automatic. Diese Einstellung veranlasst den Optimierer, Pläne für jede SQL Anweisung zu generieren, die entweder geplant oder zweimal oder öfter ausgeführt wird.

    Anmerkung

    Die Abfrageplanverwaltung verfügt auch über einen manuellen Modus, den Sie für bestimmte SQL Anweisungen verwenden können. Weitere Informationen hierzu finden Sie unter Erfassung von Aurora PostgreSQL-Ausführungsplänen.

  11. Ändern Sie den Wert des apg_plan_mgmt.use_plan_baselines-Parameters in „on“. Dieser Parameter veranlasst den Optimierer, einen Plan für die Anweisung aus der Plan-Baseline auszuwählen. Weitere Informationen hierzu finden Sie unter Verwenden von Aurora PostgreSQL-Plänen.

    Anmerkung

    Sie können den Wert eines dieser dynamischen Parameter für die Sitzung ändern, ohne die Instance neu starten zu müssen.

Wenn die Einrichtung der Abfrageplanverwaltung abgeschlossen ist, müssen Sie die apg_plan_mgmt-Rolle allen Datenbankbenutzern zuweisen, die Abfragepläne anzeigen, verwalten oder pflegen müssen.

Aktualisierung der Verwaltung von Aurora SQL Postgre-Abfrageplänen

Wir empfehlen Ihnen, die Erweiterung zur Verwaltung von Abfrageplänen auf die neueste Version für Ihre Version von Aurora Postgre SQL zu aktualisieren.

  1. Stellen Sie als Benutzer mit rds_superuser Rechten eine Connect zur Writer-Instance Ihres Aurora SQL Postgre-DB-Clusters her. Wenn Sie bei der Einrichtung Ihrer Instance den Standardnamen beibehalten haben, stellen Sie wie folgt eine Verbindung her. postgres Dieses Beispiel zeigt, wie Sie es verwenden könnenpsql, aber Sie können es auch verwenden, pgAdmin wenn Sie es vorziehen.

    psql --host=111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
  2. Führen Sie die folgende Abfrage aus, um die Erweiterung zu aktualisieren.

    ALTER EXTENSION apg_plan_mgmt UPDATE TO '2.1';
  3. Verwenden Sie die Funktion apg_plan_mgmt.validate_plans, um die Hashes aller Pläne zu aktualisieren. Der Optimierer validiert alle genehmigten, nicht genehmigten und abgelehnten Pläne, um sicherzustellen, dass es sich weiterhin um durchführbare Pläne für die neue Version der Erweiterung handelt.

    SELECT apg_plan_mgmt.validate_plans('update_plan_hash');

    Weitere Informationen zu dieser Funktion finden Sie unter Validieren von Plänen.

  4. Verwenden Sie die Funktion apg_plan_mgmt.reload, um alle Pläne im gemeinsam genutzten Arbeitsspeicher mit den validierten Plänen aus der dba_plans-Ansicht zu aktualisieren.

    SELECT apg_plan_mgmt.reload();

Weitere Informationen zu allen Funktionen, die für die Abfrageplanverwaltung verfügbar sind, finden Sie unter Funktionsreferenz für die Verwaltung von Aurora SQL Postgre-Abfrageplänen.

Die Verwaltung des Aurora SQL Postgre-Abfrageplans ausschalten

Sie können die Abfrageplanverwaltung jederzeit deaktivieren, indem Sie die apg_plan_mgmt.use_plan_baselines und apg_plan_mgmt.capture_plan_baselines deaktivieren.

labdb=> SET apg_plan_mgmt.use_plan_baselines = off; labdb=> SET apg_plan_mgmt.capture_plan_baselines = off;