Grundlagen zur Abfrageplanverwaltung in Aurora PostgreSQL - 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.

Grundlagen zur Abfrageplanverwaltung in Aurora PostgreSQL

Wenn die Abfrageplanverwaltung für Ihren DB-Cluster von Aurora PostgreSQL aktiviert ist, generiert und speichert der Optimierer Abfrageausführungspläne für jede SQL-Anweisung, die er mehr als einmal verarbeitet. Der Status des zuerst generierten Plans einer verwalteten Anweisung wird vom Optimierer immer aufApproved festgelegt und in der dba_plans-Ansicht gespeichert.

Der Satz an genehmigten Plänen, der für eine verwaltete Anweisung gespeichert wird, wird als Plan-Baseline bezeichnet. Während der Ausführung Ihrer Anwendung generiert der Optimierer möglicherweise zusätzliche Pläne für verwaltete Anweisungen. Der Status zusätzlich erfasster Pläne wird vom Optimierer auf Unapproved festgelegt.

Später können Sie entscheiden, ob die Unapproved-Pläne ordnungsgemäß funktionieren und ihren Status bei Bedarf in Approved, Rejected oder Preferred ändern. Dazu verwenden Sie die Funktion apg_plan_mgmt.evolve_plan_baselines oder apg_plan_mgmt.set_plan_status.

Wenn der Optimierer einen Plan für eine SQL-Anweisung generiert, speichert die Abfrageplanverwaltung den Plan in der apg_plan_mgmt.plans-Tabelle. Datenbankbenutzer, denen die apg_plan_mgmt-Rolle zugewiesen wurde, können die Plandetails anzeigen, indem sie die apg_plan_mgmt.dba_plans-Ansicht abfragen. Die folgende Abfrage listet beispielsweise Details zu Plänen auf, die sich derzeit in der Ansicht für einen DB-Cluster von Aurora PostgreSQL außerhalb der Produktion befinden.

  • sql_hash: Ein Bezeichner für die SQL-Anweisung, der der Hashwert für den normalisierten Text der SQL-Anweisung ist.

  • plan_hash: Ein eindeutiger Bezeichner für den Plan, der eine Kombination aus dem sql_hash und einem Hash des Plans ist.

  • status: der Status des Plans Der Optimierer kann einen genehmigten Plan ausführen.

  • enabled: Gibt an, ob der Plan einsatzbereit ist (true) oder nicht (false).

  • plan_outline: Eine Darstellung des Plans, mit der der tatsächliche Ausführungsplan neu erstellt wird. Operatoren in der Baumstruktur werden Operatoren in der EXPLAIN-Ausgabe zugeordnet.

Die apg_plan_mgmt.dba_plans-Ansicht hat viele weitere Spalten, die alle Details des Plans enthalten, z. B. wann der Plan zuletzt verwendet wurde. Vollständige Details finden Sie unter Referenz für die apg_plan_mgmt.dba_plans-Ansicht.

Normalisierung und der SQL-Hash

In der apg_plan_mgmt.dba_plans-Ansicht können Sie eine verwaltete Anweisung anhand ihres SQL-Hash-Werts erkennen. Der SQL-Hash wird auf Basis einer normalisierten Darstellung der SQL-Anweisung berechnet, bei der einige Unterschiede (z. B. Literalwerte) nicht berücksichtigt sind.

Beim Normalisierungsprozess für jede SQL-Anweisung werden Leerzeichen und Groß- und Kleinschreibung beibehalten, sodass Sie das Wesentliche der SQL-Anweisung weiterhin lesen und verstehen können. Durch die Normalisierung werden die folgenden Elemente entfernt oder ersetzt.

  • Führende Blockkommentare

  • Das Schlüsselwort EXPLAIN und EXPLAIN-Optionen sowie EXPLAIN ANALYZE

  • Leerzeichen am Zeilenende

  • Alle Literale

Sehen Sie sich die folgende Anweisung als Beispiel an.

/*Leading comment*/ EXPLAIN SELECT /* Query 1 */ * FROM t WHERE x > 7 AND y = 1;

Der Optimierer normalisiert diese Anweisung wie im Folgenden gezeigt.

SELECT /* Query 1 */ * FROM t WHERE x > CONST AND y = CONST;

Durch die Normalisierung kann derselbe SQL-Hash für ähnliche SQL-Anweisungen verwendet werden, die sich ggf. ausschließlich in ihren Literal- oder Parameterwerten unterscheiden. Mit anderen Worten, es können mehrere Pläne für denselben SQL-Hash existieren, wobei ein anderer Plan unter anderen Bedingungen optimal ist.

Anmerkung

Eine einzelne SQL-Anweisung, die mit verschiedenen Schemas verwendet wird, hat unterschiedliche Pläne, da sie an das spezifische Schema zur Laufzeit gebunden ist. Der Planer verwendet die Statistiken für die Schemabindung, um den optimalen Plan auszuwählen.

Weitere Informationen dazu, wie der Optimierer den Plan auswählt, finden Sie unter Verwenden von Aurora PostgreSQL-Plänen. In diesem Abschnitt erfahren Sie, wie Sie einen Plan mit EXPLAIN und EXPLAIN ANALYZE in der Vorschau anzeigen, bevor er tatsächlich verwendet wird. Details hierzu finden Sie unter Analysieren des vom Optimierer ausgewählten Plans. Ein Abbildung, die den Prozess zur Auswahl eines Plans beschreibt, finden Sie unter Erfahren Sie, wie der Optimierer bestimmt, welche Pläne ausgeführt werden..