Verwenden von Aurora PostgreSQL-Plä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.

Verwenden von Aurora PostgreSQL-Plänen

Setzen Sie den Parameter apg_plan_mgmt.use_plan_baselines auf true, damit der Optimierer erfasste Pläne für Ihre verwalteten Anweisungen verwendet. Im Folgenden wird ein Beispiel mit einer lokalen Instance gezeigt:

SET apg_plan_mgmt.use_plan_baselines = true;

Diese Einstellung führt bei laufender Anwendung dazu, dass der Optimierer für jede verwaltete Anweisung jenen kostengünstigsten, bevorzugten oder genehmigten Plan verwendet, der gültig und aktiviert ist.

Analysieren des vom Optimierer ausgewählten Plans

Wenn der Parameter apg_plan_mgmt.use_plan_baselines auf true gesetzt ist, können Sie mit SQL-Anweisungen vom Typ EXPLAIN ANALYZE erfahren, welchen Plan der Optimierer zum Ausführen der Anweisung auswählen würde. Im Folgenden wird ein Beispiel gezeigt.

EXPLAIN ANALYZE EXECUTE rangeQuery (1,10000);
QUERY PLAN -------------------------------------------------------------------------- Aggregate (cost=393.29..393.30 rows=1 width=8) (actual time=7.251..7.251 rows=1 loops=1) -> Index Only Scan using t1_pkey on t1 t (cost=0.29..368.29 rows=10000 width=0) (actual time=0.061..4.859 rows=10000 loops=1) Index Cond: ((id >= 1) AND (id <= 10000)) Heap Fetches: 10000 Planning time: 1.408 ms Execution time: 7.291 ms Note: An Approved plan was used instead of the minimum cost plan. SQL Hash: 1984047223, Plan Hash: 512153379

Die Ausgabe zeigt den genehmigten Plan aus der Baseline, der ausgeführt werden würde. Die Ergebnisse zeigen jedoch auch, dass ein kostengünstigerer Plan gefunden wurde. In diesem Fall erfassen Sie diesen neuen Minimalkostenplan, indem Sie die unter beschriebene automatische Planerfassung aktiviere Automatisches Erfassen von Plänen.

Neue Pläne werden vom Optimierer immer als Unapproved erfasst. Mit der Funktion apg_plan_mgmt.evolve_plan_baselines vergleichen Sie Pläne und können deren Status zu „Genehmigt“, „Abgelehnt“ oder „Deaktiviert“ ändern. Weitere Informationen finden Sie unter Auswerten der Performance von Plänen.

Erfahren Sie, wie der Optimierer bestimmt, welche Pläne ausgeführt werden.

Die Kosten für einen Ausführungsplan stellen eine Schätzung dar, die der Optimierer zum Vergleichen verschiedener Pläne durchführt. Bei der Berechnung der Kosten eines Plans berücksichtigt der Optimierer Faktoren wie CPU- und I/O-Vorgänge, die für diesen Plan erforderlich sind. Um mehr über Kostenschätzungen des PostgreSQL-Abfrageplaners zu erfahren, lesen Sie bitte Query Planning (Abfrageplanung) in der PostgreSQL-Dokumentation.

Die folgende Abbildung zeigt, wie ein Plan für eine bestimmte SQL-Anweisung ausgewählt wird, wenn die Abfrageplanverwaltung aktiv und nicht aktiv ist.

Abfrageplanverwaltung-Workflow in Aurora PostgreSQL

Der Ablauf ist wie folgt:

  1. Der Optimierer erstellt einen Minimalkostenplan für die SQL-Anweisung.

  2. Wenn die Abfrageplanverwaltung nicht aktiv ist, wird der Plan des Optimierers sofort ausgeführt (A. Optimizer-Plan ausführen). Die Abfrageplanverwaltung ist inaktiv, wenn die apg_plan_mgmt.capture_plan_baselines und apg_plan_mgmt.use_plan_baselines-Parameter beide ihre Standardeinstellungen haben („off“ bzw. „false“).

    Andernfalls ist die Abfrageplanverwaltung aktiv. In diesem Fall werden die SQL-Anweisung und der Plan des Optimierers dafür weiter bewertet, bevor ein Plan ausgewählt wird.

    Tipp

    Datenbankbenutzer mit der apg_plan_mgmt-Rolle können proaktiv Pläne vergleichen, den Status von Plänen ändern und die Verwendung bestimmter Pläne nach Bedarf erzwingen. Weitere Informationen finden Sie unter Pflege der Aurora-PostgreSQL-Ausführungspläne.

  3. Die SQL-Anweisung enthält möglicherweise bereits Pläne, die in der Vergangenheit von der Abfrageplanverwaltung gespeichert wurden. Pläne werden in der apg_plan_mgmt.dba_plans aufbewahrt, zusammen mit Informationen über die SQL-Anweisungen, mit denen sie erstellt wurden. Informationen zu einem Plan beinhalten seinen Status. Der Status eines Plans kann wie folgt bestimmen, ob er verwendet wird oder nicht.

    1. Wenn der Plan nicht zu den gespeicherten Plänen für die SQL-Anweisung gehört, bedeutet dies, dass dieser spezielle Plan zum ersten Mal vom Optimierer für die angegebene SQL-Anweisung generiert wurde. Der Plan wird an die Erfassungsplanverarbeitung gesendet (4).

    2. Wenn der Plan zu den gespeicherten Plänen gehört und sein Status Genehmigt oder Bevorzugt ist, wird der Plan ausgeführt (A. Optimizer-Plan ausführen).

      Wenn der Plan zu den gespeicherten Plänen gehört, aber weder Genehmigt noch Bevorzugt ist, wird der Plan an die Erfassungsplanverarbeitung gesendet (4).

  4. Wenn ein Plan zum ersten Mal für eine bestimmte SQL-Anweisung erfasst wird, wird der Status des Plans immer auf Genehmigt (P1) gesetzt. Wenn der Optimierer anschließend denselben Plan für dieselbe SQL-Anweisung generiert, wird der Status dieses Plans in Nicht genehmigt (P1+n) geändert.

    Nachdem der Plan erfasst und sein Status aktualisiert wurde, wird die Bewertung im nächsten Schritt fortgesetzt (5).

  5. Die Baseline eines Plans besteht aus der Historie der SQL-Anweisung und ihrer Pläne in verschiedenen Stadien. Die Abfrageplanverwaltung kann den Basisplan bei der Auswahl eines Plans berücksichtigen, je nachdem, ob die Option Plan-Baselines verwenden aktiviert ist oder nicht, wie folgt.

    • Plan-Baselines ist „Aus“ verwenden, wenn der apg_plan_mgmt.use_plan_baselines-Parameter auf den Standardwert (false) gesetzt ist. Der Plan wird nicht mit der Baseline verglichen, bevor er ausgeführt wird (A. Optimizer-Plan ausführen).

    • Plan-Baselines ist „Ein“ verwenden, wenn der apg_plan_mgmt.use_plan_baselines-Parameter auf den Standardwert (true) gesetzt ist. Der Plan wird anhand der Basislinie weiter bewertet (6).

  6. Der Plan wird mit anderen Plänen für den Kontoauszug in der Basislinie verglichen.

    1. Wenn der Plan des Optimierers zu den Plänen in der Baseline gehört, wird sein Status überprüft (7a).

    2. Befindet sich der Plan des Optimierers nicht unter den Plänen in der Baseline, wird der Plan als neuer Unapproved-Plan zu den Plänen für die Anweisung hinzugefügt.

  7. Der Status des Plans wird überprüft, um nur festzustellen, ob er nicht genehmigt ist.

    1. Wenn der Status des Plans Nicht genehmigt lautet, werden die geschätzten Kosten des Plans mit der Kostenschätzung verglichen, die für den Schwellenwert für den nicht genehmigten Ausführungsplan angegeben wurde.

      • Wenn die geschätzten Kosten des Plans unter dem Schwellenwert liegen, verwendet der Optimierer ihn, obwohl es sich um einen nicht genehmigten Plan handelt (A. Optimizer-Plan ausführen). Im Allgemeinen führt der Optimierer keinen nicht genehmigten Plan aus. Wenn der apg_plan_mgmt.unapproved_plan_execution_threshold-Parameter jedoch einen Kostenschwellenwert angibt, vergleicht der Optimierer die Kosten des nicht genehmigten Plans mit dem Schwellenwert. Falls die geschätzten Kosten niedriger als der Schwellenwert sind, führt der Optimierer den Plan aus. Weitere Informationen finden Sie unter apg_plan_mgmt.unapproved_plan_execution_threshold.

      • Wenn die geschätzten Kosten des Plans nicht unter dem Schwellenwert liegen, werden die anderen Attribute des Plans überprüft (8a).

    2. Wenn der Status des Plans etwas anderes als Nicht genehmigt ist, werden seine anderen Attribute überprüft (8a).

  8. Der Optimierer wird keinen Plan verwenden, der deaktiviert ist. Das heißt, der Plan, dessen enable-Attribut auf ‚f‘ (false) gesetzt ist. Der Optimierer verwendet auch keinen Plan mit dem Status Abgelehnt.

    Der Optimierer kann keine Pläne verwenden, die nicht gültig sind. Pläne können mit der Zeit ungültig werden, wenn die Objekte, von denen sie abhängen, wie Indizes und Tabellenpartitionen, entfernt oder gelöscht werden.

    1. Falls die Anweisung über aktivierte und gültige bevorzugte Pläne verfügt, wählt der Optimierer den kostengünstigsten Plan aus den für diese SQL-Anweisung gespeicherten bevorzugten Plan aus. Der Optimierer führt dann den kostengünstigsten bevorzugten Plan aus.

    2. Wenn die Abrechnung keine aktivierten und gültigen Preferred-Pläne enthält, wird sie im nächsten Schritt bewertet (9).

  9. Falls die Anweisung über aktivierte und gültige Genehmigte Pläne verfügt, wählt der Optimierer den kostengünstigsten Plan aus den für diese SQL-Anweisung gespeicherten Genehmigten Plan aus. Der Optimierer führt dann den kostengünstigsten genehmigten Plan aus.

    Wenn die Abrechnung keine gültigen und aktivierten Genehmigten Pläne enthält, verwendet der Optimierer den Mindestkostenplan (A. Optimierer-Plan ausführen).