

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.

# Die Abfrageplanverwaltung in Aurora PostgreSQL
<a name="AuroraPostgreSQL.Optimize.Start"></a>

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 auf `Approved` 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\$1plan\$1mgmt.dba\$1plans-Ansicht für die Aurora-PostgreSQL-kompatible Edition](AuroraPostgreSQL.Optimize.dba_plans_view_Reference.md). 

## Normalisierung und der SQL-Hash
<a name="AuroraPostgreSQL.Optimize.Start.hash-and-normalization"></a>

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; 
```

Die Abfrageplanverwaltung 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](AuroraPostgreSQL.Optimize.UsePlans.md). 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](AuroraPostgreSQL.Optimize.UsePlans.md#AuroraPostgreSQL.Optimize.UsePlans.AnalyzePlans). 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.](AuroraPostgreSQL.Optimize.UsePlans.md#AuroraPostgreSQL.Optimize.UsePlans.ChoosePlans). 