Ressourcen optimieren und Leseanfragen mit transparenter Abfrageweiterleitung isolieren

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.

Transparente Abfrageweiterleitung

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

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 UPDATE verwendet 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, USER oder CURRENT_SCHEMA enthalten.
    • 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:
  • completed: wird auf einer Lesepoolinstanz ausgeführt.
  • fallback: wird auf der primären Instanz ausgeführt.
  • disqualified: konnte nicht weitergeleitet werden.

Nächste Schritte