Abfragepläne verwalten

In diesem Dokument wird beschrieben, wie Sie die Leistung Ihres Abfrageplans mithilfe der Abfrageplanverwaltung in AlloyDB for PostgreSQL verbessern können. Das Abfrageplan-Management verfolgt kontinuierlich alle Abfragepläne und deren Ausführungsstatistiken in Ihrer Datenbank. Nachdem Sie die Abfragen und die damit verbundenen Kosten geprüft haben, können Sie einen Plan genehmigen, der dann einheitlich für eine bestimmte Abfrage angewendet wird. Dieser Ansatz sorgt dafür, dass ein kostengünstiger Abfrageplan ausgewählt wird, was zu einer besseren Abfrageleistung führt.

Funktionsweise

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

Da sich die Abfrageparameter bei jeder Abfrageausführung ä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 Änderung des Plans 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 dem Abfrageplan-Management können Sie die vom Optimierer erstellten Muster und Pläne nachvollziehen und jeden Plan aufrufen, um fundierte Entscheidungen zu treffen.

Die beiden Hauptkomponenten des Abfrageplan-Managements sind:

Abfrageplan-Repository
Wenn Sie das Abfrageplan-Management für Ihre Datenbank aktivieren, beginnt das Plan-Repository mit dem Erfassen von Verlaufsplänen und Ausführungsstatistiken für Ihre Datenbank. Das Abfrageplan-Repository bietet Einblicke in die Leistung des Abfrageplans.
Aboverwaltung
Nachdem Sie die verfügbaren Pläne geprüft haben, können Sie mit der Planverwaltungskomponente einen oder mehrere Pläne für eine bestimmte Abfragevorlage genehmigen. Das Abfrageplan-Management verfolgt diese genehmigten Pläne und sorgt dafür, dass der Abfrageoptimierer bei der nachfolgenden Ausführung der Abfrage nur einen der genehmigten Pläne verwendet. Wenn mehrere Pläne genehmigt sind, wählt AlloyDB den Plan mit den niedrigsten geschätzten Kosten aus und führt ihn aus.

Hinweis

  • Legen Sie das Datenbank-Flag google_plan_management.enabled auf on fest. Weitere Informationen finden Sie unter Datenbank-Flags konfigurieren.
  • Erstellen Sie die Erweiterung google_plan_management in der Datenbank. Weitere Informationen finden Sie unter Erweiterung aktivieren.
  • Gewähren Sie Nutzern der Datenbank, die das Abfrageplan-Management 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.

Getrackte Abfragepläne ansehen

Das Abfrageplan-Management bietet eine Abfrageplanansicht, in der alle erfassten 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 den Verlauf der verfolgten Pläne aufzurufen:

SELECT * FROM google_plan_management.tracked_plans_view;

Die Abfrageantwort 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 des Abfrageplans deaktivieren

Wenn Sie nicht möchten, dass die vom Optimierer generierten Abfragepläne vom Abfrageplan-Management erfasst werden, müssen Sie das Datenbank-Flag google_plan_management.enable_track_plans deaktivieren. Dieses Flag ist standardmäßig aktiviert und 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 aufrufen, die vom Abfrageplan-Management 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 Abfrageantwort 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

Der Optimierer wählt einen Abfrageplan dynamisch aus. Das bedeutet, dass er für dieselbe Abfrage zu verschiedenen Zeiten unterschiedliche Abfragepläne auswählen kann. Wenn Sie eine einheitliche Planauswahl erzwingen möchten, können Sie mit dem Abfrageplan-Management einen oder mehrere Abfragepläne für eine bestimmte Abfrage genehmigen.

Wenn Sie mehrere Pläne genehmigen, vergleicht das Abfrageplan-Management alle genehmigten Pläne und wählt den kostengünstigsten Plan für die Abfrageausführung aus.

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

  1. Sehen Sie sich die verfolgten Pläne an, die der Optimierer generiert hat, und identifizieren Sie die logical_query_id in der Antwort.

  2. Prüfen Sie alle Pläne, die für 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, z. B. 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 Abfrage. Jede Abfrage-ID kann mit mehreren Plan-IDs verknüpft 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 verhindern, dass das Abfrageplan-Management den Plan auf die Abfrage anwendet. Abgelehnte Pläne werden nicht gelöscht und sind in der Liste der beobachteten 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 Datenbank-Flag google_plan_management.enable_steer_plans deaktivieren. Dieses Flag ist standardmäßig aktiviert. Weitere Informationen finden Sie unter Datenbank-Flags konfigurieren.

Beschränkungen

  • Sie können das Abfrageplan-Management nicht in partitionierten Tabellen oder Gruppierungssätzen verwenden.
  • Das Abfrageplan-Management wird nur auf der primären Instanz unterstützt.
  • Im Abfrageplan-Repository können bis zu 100.000 eindeutige Pläne gespeichert werden. Es gibt keine Aufbewahrungsrichtlinie.

Nächste Schritte