Abfragepläne verwalten

In diesem Dokument wird beschrieben, wie Sie die Leistung Ihres Abfrageplans mit der Abfrageplanverwaltung in AlloyDB for PostgreSQL verbessern können. Bei der Verwaltung von Abfrageplänen werden alle Abfragepläne und ihre Ausführungsstatistiken in Ihrer Datenbank kontinuierlich erfasst. Nachdem Sie die Abfragen und die zugehörigen Kosten geprüft haben, können Sie einen Plan genehmigen, der für eine bestimmte Abfrage einheitlich angewendet wird. Dieser Ansatz sorgt für die Auswahl eines kosteneffizienten Abfrageplans, was zu einer besseren Abfrageleistung führt.

Funktionsweise

In PostgreSQL wählt ein Abfrageoptimierungstool für jede Abfrage einen Ausführungsplan basierend auf geschätzten Kosten aus. Viele Faktoren beeinflussen die Kosten einer Abfrage, z. B. Abfrageparameter, Komplexität der Abfrage, Tabellengröße, verfügbare Indexe und Systemressourcen.

Da sich Abfrageparameter bei jeder Ausführung der Abfrage ändern können, führt die dynamische Auswahl eines Abfrageplans möglicherweise nicht immer zu optimalen Ergebnissen. Bei der Verarbeitung einer Abfrage wertet das Optimierungstool verschiedene Ausführungspläne aus und versucht, den kostengünstigsten Plan auszuwählen.

Eine Parameteränderung kann zu einer Tarifänderung führen. Der ausgewählte Plan ist in der Regel die kostengünstigste Option. Es kann jedoch vorkommen, dass ein weniger kostengünstiger Plan ausgewählt wird, was zu einer schlechten Abfrageleistung führt. Mit der Verwaltung von Abfrageplänen können Sie die Muster und Pläne des Optimierers nachvollziehen und jeden Plan ansehen, um fundierte Entscheidungen zu treffen.

Die beiden Hauptkomponenten der Verwaltung von Abfrageplänen sind:

Repository für Abfragepläne
Wenn Sie die Verwaltung von Abfrageplänen für Ihre Datenbank aktivieren, werden im Plan-Repository historische Pläne und Ausführungsstatistiken für Ihre Datenbank erfasst. Das Repository für Abfragepläne bietet Informationen zur Leistung des Abfrageplans.
Aboverwaltung
Nachdem Sie die verfügbaren Pläne geprüft haben, können Sie mit der Komponente zur Planverwaltung einen oder mehrere Pläne für eine bestimmte Abfragevorlage genehmigen. Bei der Verwaltung von Abfrageplänen werden diese genehmigten Pläne verfolgt. Wenn die Abfrage anschließend ausgeführt wird, verwendet das Abfrageoptimierungstool nur einen der genehmigten Pläne. Wenn mehrere Pläne genehmigt sind, wählt AlloyDB den Plan mit den niedrigsten geschätzten Kosten aus und führt ihn aus.

Hinweise

  • Legen Sie das Datenbank-Flag google_plan_management.enabled auf on fest. Weitere Informationen finden Sie unter Datenbank-Flags konfigurieren.
  • Erstellen Sie die google_plan_management-Erweiterung in der Datenbank. Weitere Informationen finden Sie unter Erweiterung aktivieren.
  • Gewähren Sie Nutzern der Datenbank, die die Verwaltung von Abfrageplänen verwenden und Abfragepläne verwalten möchten, die Rolle google_plan_management_role.

    1. Rufen Sie in der Google Cloud Console die AlloyDB-Seite Cluster auf.

      Zu den Clustern

    2. Klicken Sie auf die gewünschte Instanz.

    3. Klicken Sie auf AlloyDB Studio und dann auf den Tab Editor 1.

    4. Geben Sie die folgende Abfrage ein:

      GRANT google_plan_management_role TO DATABASE_USER;
      

      Ersetzen Sie DATABASE_USER durch den Nutzer, dem Sie die Rolle zuweisen möchten.

    5. Klicken Sie auf Ausführen.

Erfasste Abfragepläne ansehen

Die Verwaltung von Abfrageplänen bietet eine Ansicht, in der alle verfolgten Abfragepläne, ihre Ausführungszeiten und andere Informationen angezeigt werden. Ein verfolgter Abfrageplan ist ein Abfrageplan, der vom Optimierer generiert und im Plan-Repository gespeichert wird.

Führen Sie die folgende Abfrage aus, um frühere verfolgte Pläne aufzurufen:

SELECT * FROM google_plan_management.tracked_plans_view;

Die Antwort auf die Anfrage sieht in etwa so aus:

db_id                | 5
db_name              | postgres
user_id              | 16392
user_name            | postgres
logical_query_id     | 15480571796188147798
plan_id              | 4740866759615354783
query                | SELECT c1, c2, c3 FROM t1 WHERE c1 = 1;
plan                 | Seq Scan on public.t1                                                                                                                                                            +
                     |   Output: c1, c2, c3                                                                                                                                                             +
                     |   Filter: (t1.c1 = ?)
total_execution_time | 0.003937501
num_executions       | 1
creation_time        | 2024-11-06 16:52:25.200737+00
last_used_time       | 2024-11-06 16:52:25.200737+00

Tracking von Abfrageplänen deaktivieren

Wenn Sie nicht möchten, dass die Verwaltung von Abfrageplänen die vom Optimierer generierten Abfragepläne verfolgt, müssen Sie das Datenbankflag google_plan_management.enable_track_plans deaktivieren. Dieses Flag ist standardmäßig aktiviert. Wir empfehlen, es aktiviert zu lassen. Weitere Informationen finden Sie unter Datenbank-Flags konfigurieren.

Verwaltete Pläne ansehen

Sie können alle Abfragen und Pläne ansehen, die von der Verwaltung von Abfrageplänen verwaltet werden, einschließlich genehmigter und abgelehnter Pläne.

Führen Sie die folgende Abfrage aus, um verwaltete Pläne aufzurufen:

SELECT * FROM google_plan_management.managed_plans_view;

Die Antwort auf die Anfrage sieht in etwa so aus:

db_id            | 5
db_name          | postgres
user_id          | 16392
user_name        | postgres
logical_query_id | 15480571796188147798
plan_id          | 4740866759615354783
status           | approved

Plan genehmigen

Das Optimierungstool wählt einen Abfrageplan dynamisch aus. Das bedeutet, dass es für dieselbe Abfrage zu unterschiedlichen Zeiten möglicherweise unterschiedliche Abfragepläne auswählt. Um eine einheitliche Planauswahl zu erzwingen, können Sie mit dem Abfrageplan-Management einen oder mehrere Abfragepläne für eine bestimmte Abfrage genehmigen.

Wenn Sie mehrere Pläne genehmigen, werden alle genehmigten Pläne vom Tool für die Verwaltung von Abfrageplänen verglichen und der kostengünstigste Plan für die Abfrageausführung wird ausgewählt.

So bewerten und genehmigen Sie einen Plan für eine Abfrage:

  1. Sehen Sie sich die verfolgten Pläne an, die vom Optimierer generiert wurden, und ermitteln Sie die logical_query_id in der Antwort.

  2. Sehen Sie sich alle Pläne an, die für die logical_query_id generiert wurden. Sie können die durchschnittliche Ausführungszeit für jeden Plan anhand der Werte total_execution_time und num_executions berechnen und dann den besten Plan für Ihre Abfrage auswählen.

    Die Spalte plan enthält weitere Details wie den verwendeten Index oder die verwendete Sortiermethode, die Ihnen bei der Entscheidung für einen Abfrageplan helfen können.

  3. Genehmigen Sie den Plan, den Sie auf die Abfrage anwenden möchten, indem Sie die folgende Abfrage ausführen:

      SELECT google_plan_management.approve_plan(QUERY_ID, PLAN_ID);
    

    Ersetzen Sie Folgendes:

    • QUERY_ID: die eindeutige logical_query_id für die Anfrage. Jede Abfrage-ID kann mehreren Plan-IDs zugeordnet sein.
    • PLAN_ID: die eindeutige plan_id für die Abfrage.

Plan ablehnen

Sie können einen genehmigten Plan für eine Abfrage ablehnen und so verhindern, dass das Abfrageplan-Management den Plan auf die Abfrage anwendet. Abgelehnte Pläne werden nicht gelöscht und sind in der Liste der erfassten Pläne verfügbar.

Führen Sie die folgende Abfrage aus, um einen genehmigten Plan abzulehnen:

    SELECT google_plan_management.deny_plan(QUERY_ID, PLAN_ID);

Genehmigten Plan löschen

Sie können einen genehmigten Plan aus dem Plan-Repository löschen. Wenn Sie einen genehmigten Plan löschen, wird er nicht mehr in der Liste der verwalteten Pläne angezeigt.

Führen Sie die folgende Abfrage aus, um einen genehmigten Plan zu löschen:

    SELECT google_plan_management.update_plan_status(QUERY_ID, PLAN_ID, 'delete');

Genehmigte Pläne vorübergehend nicht mehr verwenden

Wenn Sie die Verwendung genehmigter Pläne für Ihre Abfragen vorübergehend beenden möchten, müssen Sie das Datenbankflag google_plan_management.enable_steer_plans deaktivieren. Dieses Flag ist standardmäßig aktiviert. Weitere Informationen finden Sie unter Datenbank-Flags konfigurieren.

Beschränkungen

  • Die Verwaltung von Abfrageplänen kann nicht für partitionierte Tabellen oder Gruppierungssätze verwendet werden.
  • Die Verwaltung von Abfrageplänen wird nur in der primären Instanz unterstützt.
  • Im Repository für Abfragepläne können bis zu 100.000 eindeutige Pläne gespeichert werden. Es gibt keine Aufbewahrungsrichtlinie.

Nächste Schritte