Auf dieser Seite wird beschrieben, wie Sie die transparente Weiterleitung von Anfragen in Ihren AlloyDB for PostgreSQL-Instanzen aktivieren, konfigurieren und überwachen. Die transparente Abfrageweiterleitung ist eine intelligente Funktion zur Ressourcenoptimierung, mit der der primäre Knoten schreibgeschützte Abfragen abfangen und selektiv an unterlastete Instanzen des Lesepools weiterleiten kann. Dabei wird die Read-Your-Writes-Konsistenz beibehalten. Abfragen, die an den Lesepool weitergeleitet werden, liefern Ergebnisse, die mit der Ausführung des primären Knotens übereinstimmen.

Die transparente Weiterleitung von Anfragen eignet sich am besten für die folgenden Szenarien:
- Hybride Arbeitslasten (HTAP): Sie führen Berichts- oder Analyseabfragen mit Read-Your-Writes-Konsistenz für dieselbe Datenbank aus, die Transaktionen verarbeitet, und möchten verhindern, dass sich teure Lesevorgänge auf die Schreiblatenz auswirken.
- Monolithische Anwendungen: Sie möchten die Kapazität des Lesepools nutzen, ohne Ihre Anwendung für die Verwendung separater Lese- und Schreibendpunkte umzugestalten, und benötigen dennoch eine strikte Read-Your-Writes-Konsistenz.
- Dynamisches Lastmanagement: Sie haben unvorhersehbare Spitzen beim Lesetraffic und möchten, dass die Datenbank die Arbeit automatisch auf Lesepoolknoten auslagert, wenn der primäre Knoten stark ausgelastet ist, und zwar mit Read-Your-Writes-Konsistenz.
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 Überprüfen von Lesepoolinstanzen finden Sie unter Lesepoolinstanz in einem Cluster erstellen und Instanzdetails ansehen.
Erforderliche Rollen
- Sie benötigen die Datenbankrolle
alloydbsuperuseroder müssen als Standardnutzerpostgresangemeldet sein.
Transparente Weiterleitung von Anfragen aktivieren
Die transparente Weiterleitung von Anfragen ist standardmäßig deaktiviert. Sie können die Funktion dynamisch auf Sitzungs- oder Datenbankebene aktivieren, ohne die Datenbank neu zu starten.
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.
Bedingungen für die Abfrageberechtigung
- Die transparente Weiterleitung von Abfragen gilt nur für schreibgeschützte
SELECT-Anweisungen. - Die Abfrage darf keine Sperren auf Zeilenebene verwenden, z. B. solche, die in
SELECT ... FOR UPDATEverwendet werden. - Die transparente Weiterleitung von Abfragen bietet nur eingeschränkte Unterstützung für
SELECT-Anweisungen in Transaktionen mit mehreren Anweisungen. - Abfragen dürfen nicht auf temporäre, nicht protokollierte oder Katalogtabellen verweisen.
- Die Abfrage muss die folgenden Funktionseinschränkungen erfüllen:
- Die Abfrage darf keine flüchtigen Funktionen oder benutzerdefinierten Funktionen (User-Defined Functions, 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.
- Für alle Ergebnisspalten müssen Datentypen verwendet werden, die binäre Sende- und Empfangsfunktionen implementieren.
- Eine Anfrage kann nur weitergeleitet werden, wenn ihr Aufwand im Vergleich zu den Gesamtkosten der Anfrage minimal ist. Das bedeutet, dass Abfragen, bei denen Indexscans verwendet werden, in der Regel ausgeschlossen werden, da ihr Aufwand in der Regel 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 Instanzen mit Hochverfügbarkeit (HA).
Berechtigung für Abfragen 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 Anfrage gemäß Ihrer aktuellen Konfiguration weitergeleitet werden kann:
EXPLAIN SELECT count(*) FROM large_table t1, large_table t2;
Wenn die Abfrage infrage kommt, enthält die Ausgabe nach dem Standard-Postgres-Ausführungsplan eine Statusanweisung zur Abfrageweiterleitung. Wenn diese Anweisung fehlt, kommt die Abfrage nicht für die Weiterleitung infrage und wird lokal auf dem primären Knoten 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 Ausgabereaktion gibt Eligible an, dass die Abfrage die Standardkriterien für schreibgeschütztes SQL erfüllt und die Kosten-Nutzen-Analyse die Weiterleitung an eine Instanz im Lesepool begünstigt. Der Parameter overhead gibt die berechneten Planerkosten für das Weiterleiten der Anfrage an eine Read Pool-Instanz an, einschließlich des Aufwands für das Herstellen der Verbindung und das Wiederherstellen von Snapshots auf dem Replikat.
Messwerte für die Weiterleitung von Anfragen überwachen
Wenn Sie prüfen möchten, ob die transparente Weiterleitung von Anfragen für Ihre Arbeitslast funktioniert, können Sie den folgenden Messwert in Cloud Monitoring im Blick behalten:
| Messwert | Beschreibung | Details |
|---|---|---|
alloydb.googleapis.com/internal/database/postgresql/workload/distributed/tqf_query_count |
Die kumulative Anzahl der Anfragen, die durch die transparente Weiterleitung von Anfragen verarbeitet wurden. | Anzeigename:Anzahl der TQF-Anfragen Messwertart:CUMULATIVE Werttyp:INT64 Labels: status: Verarbeitung von Anfragen, wenn die transparente Weiterleitung von Anfragen aktiviert ist. Für dieses Label wird einer der folgenden Werte erfasst:
|