Wenn Sie Lesetraffic von Ihrer primären Instanz auslagern möchten, ohne die Read-Your-Writes-Konsistenz zu beeinträchtigen oder Verbindungsendpunkte der Anwendung zu ändern, können Sie die transparente Abfrageweiterleitung in Ihren AlloyDB for PostgreSQL-Instanzen aktivieren, konfigurieren und überwachen. Bei der transparenten Abfrageweiterleitung werden Abfragen mit Lesezugriff auf dem primären Knoten abgefangen und selektiv an nicht ausgelastete Lesepoolinstanzen weitergeleitet. Die zurückgegebenen Ergebnisse entsprechen denen der Ausführung auf dem primären Knoten.

Die transparente Abfrageweiterleitung eignet sich am besten für die folgenden Szenarien:
- Hybride Arbeitslasten (HTAP): Sie führen Berichts- oder Analyseabfragen mit Read-Your-Writes-Konsistenz in derselben Datenbank aus, die Transaktionen verarbeitet, und möchten verhindern, dass sich teure Lesevorgänge auf die Schreiblatenz auswirken.
- Monolithische Anwendungen: Sie möchten die Lesepoolkapazität nutzen, ohne Ihre Anwendung so zu refaktorieren, dass separate Lese- und Schreibendpunkte verwendet werden, und gleichzeitig eine strikte Read-Your-Writes-Konsistenz benötigen.
- Dynamische Lastverwaltung: Sie haben unvorhersehbare Spitzen im Lesetraffic und möchten, dass die Datenbank automatisch Arbeit an Lesepoolknoten auslagert, wenn der primäre Knoten stark ausgelastet ist, wobei die Konsistenz „Read-Your-Writes“ beibehalten wird.
Hinweis
Prüfen Sie, ob Ihr AlloyDB-Cluster mit PostgreSQL 17 oder 18 kompatibel ist.
In Ihrem AlloyDB-Cluster muss mindestens eine aktive Lesepoolinstanz konfiguriert sein. Informationen zum Erstellen oder Prüfen von Lesepoolinstanzen finden Sie unter Lesepoolinstanz in einem Cluster erstellen und Instanzdetails ansehen.
Erforderliche Rollen
- Achten Sie darauf, dass Sie die Verbindung mit einem integrierten Datenbanknutzer wie
postgresherstellen. Die IAM-basierte Authentifizierung wird nicht unterstützt.
Transparente Abfrageweiterleitung aktivieren
Die transparente Abfrageweiterleitung ist standardmäßig deaktiviert. Sie können sie dynamisch auf Sitzungs- oder Datenbankebene aktivieren, ohne die Datenbank neu starten zu müssen.
Auf Sitzungsebene aktivieren
Führen Sie den folgenden SQL-Befehl aus, um die transparente Abfrageweiterleitung für Ihre aktuelle Sitzung zu aktivieren:
SET alloydb.enable_query_forwarding = TRUE;
Auf Datenbankebene aktivieren
Führen Sie den folgenden SQL-Befehl aus, um die transparente Abfrageweiterleitung für eine bestimmte Datenbank zu aktivieren:
ALTER DATABASE DATABASE_NAME SET alloydb.enable_query_forwarding = ON;
Ersetzen Sie DATABASE_NAME durch den Namen Ihrer Datenbank.
Voraussetzungen für die Abfrageberechtigung
- Die transparente Abfrageweiterleitung gilt nur für schreibgeschützte
SELECT-Anweisungen. - Die Abfrage darf keine Sperren auf Zeilenebene verwenden, wie sie in
SELECT ... FOR UPDATEverwendet werden. - Die transparente Abfrageweiterleitung bietet nur eingeschränkte Unterstützung für
SELECT-Anweisungen in Transaktionen mit mehreren Anweisungen. - Abfragen können nicht auf temporäre, nicht protokollierte oder Katalogtabellen verweisen.
- Die Abfrage muss den folgenden Funktionseinschränkungen entsprechen:
- Die Abfrage darf keine flüchtigen Funktionen oder benutzerdefinierten Funktionen (UDFs) enthalten.
- Die Abfrage darf keine SQL-Wertfunktionen wie
CURRENT_DATE,LOCALTIME,USERoderCURRENT_SCHEMAenthalten. - Die Abfrage darf keine
NEXTVAL()-Ausdrücke enthalten. - Die Abfrage darf keine SQL-Prozeduren oder SQL-Funktionen enthalten.
- Alle Ergebnisspalten müssen Datentypen verwenden, die binäre Sende- und Empfangsfunktionen implementieren.
- Eine Abfrage kann nur weitergeleitet werden, wenn die Overhead-Kosten im Vergleich zu den Gesamtkosten der Abfrage minimal sind. Das bedeutet, dass Abfragen, die Indexscans verwenden, in der Regel ausgeschlossen werden, da der Aufwand dafür normalerweise die Kosten der Abfrage selbst übersteigt.
- Die Weiterleitung an einen AlloyDB-Hot-Standby-Knoten wird nicht unterstützt. Ein AlloyDB-Hot-Standby-Knoten ist ein dedizierter sekundärer Knoten für primäre Hochverfügbarkeitsinstanzen.
- Die Abfrage muss das einfache Abfrageprotokoll verwenden. Das erweiterte Abfrageprotokoll wird nicht unterstützt.
Abfrageberechtigung mit EXPLAIN prüfen
Im folgenden Beispiel ist large_table eine Tabelle in einer Datenbank mit vielen Zeilen. Führen Sie den Befehl EXPLAIN aus, um zu prüfen, ob eine bestimmte Abfrage mit Ihrer aktuellen Konfiguration weitergeleitet werden kann:
EXPLAIN SELECT count(*) FROM large_table t1, large_table t2;
Wenn die Abfrage zulässig ist, enthält die Ausgabe nach dem Standard-Postgres-Ausführungsplan eine Statusangabe zur Abfrageweiterleitung. Wenn diese Anweisung fehlt, ist die Abfrage nicht für die Abfrageweiterleitung geeignet und wird lokal auf der primären Instanz ausgeführt.
Aggregate (cost=25000.00..25000.01 rows=1 width=8)
-> Nested Loop (cost=0.00..20000.00 rows=1000000 width=0)
... [Standard Postgres Plan Steps] ...
Query Forwarding: Eligible. (overhead=1250.02)
In der Ausgabeantwort gibt Eligible an, dass die Abfrage die Standardkriterien für schreibgeschütztes SQL erfüllt und die Kosten-Nutzen-Analyse dafür spricht, sie an eine Lesepoolinstanz weiterzuleiten. Der Parameter overhead gibt die berechneten Planerkosten für die Weiterleitung der Abfrage an eine Lesepoolinstanz an, einschließlich des Overheads für das Herstellen der Verbindung und das Wiederherstellen von Snapshots auf dem Replikat.
Messwerte zur Abfrageweiterleitung überwachen
Wenn Sie prüfen möchten, ob die transparente Abfrageweiterleitung für Ihre Arbeitslast funktioniert, können Sie den folgenden Messwert in Cloud Monitoring verfolgen:
| Messwert | Beschreibung | Details |
|---|---|---|
alloydb.googleapis.com/internal/database/postgresql/workload/distributed/tqf_query_count |
Die kumulative Anzahl der Abfragen, die durch die transparente Abfrageweiterleitung verarbeitet wurden. | Anzeigename: TQF-Abfrageanzahl Messwertart: KUMULATIV Werttyp: INT64 Labels: status: Abfrageverarbeitung, wenn die transparente Abfrageweiterleitung aktiviert ist. Dieses Label zeichnet einen der folgenden Werte auf:
|