In diesem Dokument wird beschrieben, wie Sie die Leistung Ihres Abfrageplans mit der Abfrageplanverwaltung in AlloyDB for PostgreSQL verbessern können. Die Abfrageplanverwaltung verfolgt kontinuierlich alle Abfragepläne und ihre Ausführungsstatistiken in Ihrer Datenbank. Nachdem Sie die Abfragen und die damit verbundenen Kosten überprü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 verbesserten 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, 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 Planänderung führen. Der ausgewählte Plan ist in der Regel die kostengünstigste Option. Es kann jedoch vorkommen, dass ein weniger kosteneffizienter Plan ausgewählt wird, was zu einer schlechten Abfrageleistung führt. Mit der Abfrageplanverwaltung können Sie die Muster und Pläne des Optimierungstools nachvollziehen und jeden Plan ansehen, um fundierte Entscheidungen zu treffen.
Die beiden Hauptkomponenten der Abfrageplanverwaltung sind:
- Abfrageplan-Repository
- Wenn Sie die Abfrageplanverwaltung für Ihre Datenbank aktivieren, werden im Plan-Repository Verlaufspläne und Ausführungsstatistiken für Ihre Datenbank erfasst. Das Abfrageplan-Repository bietet Einblicke in die Leistung des Abfrageplans.
- Planverwaltung
- Nachdem Sie die verfügbaren Pläne überprüft haben, können Sie mit der Planverwaltungskomponente einen oder mehrere Pläne für eine bestimmte Abfragevorlage genehmigen. Die Abfrageplanverwaltung verfolgt diese genehmigten Pläne und sorgt dafür, dass das Abfrageoptimierungstool bei der anschließenden Ausführung der Abfrage nur einen der genehmigten Pläne verwendet. Wenn mehrere Pläne genehmigt wurden, 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.enabledaufonfest. Weitere Informationen finden Sie unter Datenbank-Flags konfigurieren. - Erstellen Sie die Erweiterung
google_plan_managementin der Datenbank. Weitere Informationen finden Sie unter Erweiterung aktivieren. Gewähren Sie die Rolle
google_plan_management_roleden Nutzern der Datenbank, die die Abfrageplanverwaltung verwenden und Abfragepläne verwalten möchten.Rufen Sie in der Google Cloud Console die Seite Cluster von AlloyDB auf.
Klicken Sie auf die gewünschte Instanz.
Klicken Sie auf AlloyDB Studio und dann auf den Tab Editor 1.
Geben Sie die folgende Abfrage ein:
GRANT google_plan_management_role TO DATABASE_USER;Ersetzen Sie
DATABASE_USERdurch den Nutzer, dem Sie die Rolle gewähren möchten.Klicken Sie auf Ausführen.
Erfasste Abfragepläne ansehen
Die Abfrageplanverwaltung bietet eine Abfrageplanansicht, in der alle erfassten Abfragepläne, ihre Ausführungszeiten und andere Informationen angezeigt werden. Ein erfasster Abfrageplan ist ein Abfrageplan, der vom Optimierungstool generiert und im Plan-Repository gespeichert wird.
Führen Sie die folgende Abfrage aus, um erfasste Verlaufspläne anzusehen:
SELECT * FROM google_plan_management.tracked_plans_view;
Die Abfrageantwort sieht 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
Erfassung von Abfrageplänen deaktivieren
Wenn die Abfrageplanverwaltung die vom Optimierungstool generierten Abfragepläne nicht erfassen soll, müssen Sie das Datenbank-Flag 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 Abfrageplanverwaltung verwaltet werden, einschließlich genehmigter und abgelehnter Pläne.
Führen Sie die folgende Abfrage aus, um verwaltete Pläne anzusehen:
SELECT * FROM google_plan_management.managed_plans_view;
Die Abfrageantwort sieht 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 unterschiedliche Abfragepläne auswählen kann. Um eine einheitliche Planauswahl zu erzwingen, können Sie mit der Abfrageplanverwaltung einen oder mehrere Abfragepläne für eine bestimmte Abfrage genehmigen.
Wenn Sie mehrere Pläne genehmigen, vergleicht die Abfrageplanverwaltung alle genehmigten Pläne und wählt den kostengünstigsten Plan für die Abfrageausführung aus.
So werten Sie einen Plan für eine Abfrage aus und genehmigen ihn:
Sehen Sie sich die erfassten Pläne an, die vom Optimierungstool generiert wurden, und ermitteln Sie die
logical_query_idin der Antwort.Überprüfen Sie alle Pläne, die für die
logical_query_idgeneriert wurden. Sie können die durchschnittliche Ausführungszeit für jeden Plan mit den Wertentotal_execution_timeundnum_executionsberechnen und dann den besten Plan für Ihre Abfrage auswählen.Die Spalte
planenthält weitere Details wie den verwendeten Index oder die verwendete Sortiermethode, die Ihnen bei der Entscheidung für einen Abfrageplan helfen können.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 eindeutigelogical_query_idfür die Abfrage. Jede Abfrage-ID kann mit mehreren Plan-IDs verknüpft sein.PLAN_ID: die eindeutigeplan_idfür die Abfrage.
Plan ablehnen
Sie können jeden genehmigten Plan für eine Abfrage ablehnen und verhindern, dass die Abfrageplanverwaltung 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');
Verwendung genehmigter Pläne vorübergehend beenden
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 die Abfrageplanverwaltung nicht in partitionierten Tabellen oder Gruppierungssätzen verwenden.
- Die Abfrageplanverwaltung wird nur in 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
- Informationen zur spaltenorientierten Engine von AlloyDB for PostgreSQL
- Indexberater mit Query Insights verwenden