Questa pagina descrive come abilitare, configurare e monitorare l'inoltro trasparente delle query nelle istanze AlloyDB per PostgreSQL. L'inoltro trasparente delle query è una funzionalità di ottimizzazione intelligente delle risorse che consente al nodo principale di intercettare le query di sola lettura e di inoltrarle in modo selettivo alle istanze del pool di lettura sottoutilizzate read pool instances, mantenendo al contempo la coerenza di lettura dopo scrittura. Le query inoltrate al pool di lettura producono risultati coerenti con l'esecuzione del nodo principale.

L'inoltro trasparente delle query è più adatto ai seguenti scenari:
- Workload ibridi (HTAP): esegui query di report o analitiche, con coerenza di lettura dopo scrittura, sullo stesso database che gestisce le transazioni e vuoi impedire che le letture costose influiscano sulla latenza di scrittura.
- Applicazioni monolitiche: vuoi utilizzare la capacità del pool di lettura senza eseguire il refactoring dell'applicazione per utilizzare endpoint di lettura e scrittura separati, pur richiedendo una rigorosa coerenza di lettura dopo scrittura.
- Gestione dinamica del carico: riscontri picchi imprevedibili nel traffico di lettura e vuoi che il database scarichi automaticamente il lavoro sui nodi del pool di lettura quando il nodo principale è sottoposto a un carico elevato con coerenza di lettura dopo scrittura.
Prima di iniziare
Assicurati che il cluster AlloyDB sia compatibile con PostgreSQL 17 o 18.
Devi avere almeno un'istanza del pool di lettura attiva configurata nel cluster AlloyDB. Per informazioni sulla creazione o sulla verifica delle istanze del pool di lettura, consulta Creare un'istanza del pool di lettura in un cluster e Visualizzare i dettagli dell'istanza.
Ruoli obbligatori
- Assicurati di avere il ruolo di database
alloydbsuperusero di aver eseguito l'accesso come utentepostgrespredefinito.
Abilitare l'inoltro trasparente delle query
L'inoltro trasparente delle query è disabilitato per impostazione predefinita. Puoi abilitarlo dinamicamente a livello di sessione o di database senza riavviare il database.
Abilitare a livello di sessione
Per abilitare l'inoltro trasparente delle query per la sessione corrente, esegui il seguente comando SQL:
SET alloydb.enable_query_forwarding = TRUE;
Abilitare a livello di database
Per abilitare l'inoltro trasparente delle query per un database specifico, esegui il seguente comando SQL:
ALTER DATABASE DATABASE_NAME SET alloydb.enable_query_forwarding = ON;
Sostituisci DATABASE_NAME con il nome del database.
Condizioni di idoneità delle query
- L'inoltro trasparente delle query si applica solo alle istruzioni
SELECTdi sola lettura. - La query non deve acquisire blocchi a livello di riga, come quelli utilizzati in
SELECT ... FOR UPDATE. - L'inoltro trasparente delle query ha un supporto limitato per le istruzioni
SELECTall'interno di transazioni con più istruzioni. - Le query non possono fare riferimento a tabelle temporanee, non registrate o di catalogo.
- La query deve rispettare i seguenti vincoli di funzione:
- La query non deve contenere funzioni volatili o funzioni definite dall'utente (UDF).
- La query non deve contenere funzioni di valore SQL come
CURRENT_DATE,LOCALTIME,USERoCURRENT_SCHEMA. - La query non deve contenere espressioni
NEXTVAL(). - La query non può contenere procedure SQL o funzioni SQL.
- Tutte le colonne dei risultati devono utilizzare tipi di dati che implementano funzioni di invio e ricezione binaria.
- Una query è idonea all'inoltro solo se il suo costo di overhead è minimo rispetto al costo totale della query. Ciò significa che le query che utilizzano le scansioni degli indici vengono in genere escluse, in quanto il loro overhead di solito supera il costo della query stessa.
- L'inoltro a un nodo hot standby di AlloyDB non è supportato. Un nodo hot standby di AlloyDB è un nodo secondario dedicato per le istanze principali ad alta affidabilità (HA).
Verificare l'idoneità delle query con EXPLAIN
Nell'esempio seguente, large_table è una tabella in un database con molte righe. Per verificare se una query specifica è idonea all'inoltro nella configurazione corrente, esegui il comando EXPLAIN:
EXPLAIN SELECT count(*) FROM large_table t1, large_table t2;
Se la query è idonea, l'output include un'istruzione sullo stato di inoltro della query dopo il piano di esecuzione Postgres standard. Se questa istruzione non è presente, la query non è idonea all'inoltro e viene eseguita localmente sul nodo principale.
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)
Nella risposta di output, Eligible indica che la query soddisfa i criteri SQL di sola lettura standard e l'analisi costi-benefici favorisce il routing a un'istanza del pool di lettura. Il parametro overhead indica il costo del pianificatore calcolato per l'inoltro della query a un'istanza del pool di lettura, incluso l'overhead per stabilire la connessione e ripristinare gli snapshot sulla replica.
Monitorare le metriche di inoltro delle query
Per verificare che l'inoltro trasparente delle query funzioni nel workload, puoi monitorare la seguente metrica in Cloud Monitoring:
| Metrica | Descrizione | Dettagli |
|---|---|---|
alloydb.googleapis.com/internal/database/postgresql/workload/distributed/tqf_query_count |
Il conteggio cumulativo delle query gestite dall'inoltro trasparente delle query. | Nome visualizzato: TQF query count Tipo di metrica: CUMULATIVE Tipo di valore: INT64 Etichette: status: gestione delle query se l'inoltro trasparente delle query
è abilitato. Questa etichetta registra uno dei seguenti valori:
|