Questa pagina descrive come attivare, 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 primario di intercettare le query di sola lettura e inoltrarle selettivamente alle istanze del pool di lettura sottoutilizzate, mantenendo la coerenza di lettura e 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 reporting o analitiche, con coerenza di lettura delle scritture, 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 coerenza rigorosa di lettura e scrittura.
- Gestione dinamica del carico: si verificano picchi imprevedibili nel traffico di lettura e vuoi che il database scarichi automaticamente il lavoro sui nodi del pool di lettura quando il nodo primario è sottoposto a un carico elevato con coerenza di lettura/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 la verifica delle istanze del pool di lettura, vedi Crea un'istanza del pool di lettura in un cluster e Visualizza i dettagli dell'istanza.
Ruoli obbligatori
- Assicurati di connetterti utilizzando un utente del database
integrato, ad esempio
postgres. L'autenticazione basata su IAM non è supportata.
Abilita l'inoltro trasparente delle query
L'inoltro trasparente delle query è disattivato per impostazione predefinita. Puoi abilitarlo in modo dinamico 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 questo 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 tuo 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 supporta in modo limitato le istruzioni
SELECTall'interno delle 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 o funzioni SQL.
- Tutte le colonne dei risultati devono utilizzare tipi di dati che implementano funzioni di invio e ricezione binari.
- Una query è idonea per l'inoltro solo se il suo costo indiretto è minimo rispetto al costo totale della query. Ciò significa che le query che utilizzano scansioni dell'indice vengono in genere escluse, poiché il loro overhead di solito supera il costo della query stessa.
- L'inoltro a un nodo di standby attivo AlloyDB non è supportato. Un nodo di standby attivo AlloyDB è un nodo secondario dedicato per le istanze primarie ad alta affidabilità.
- La query deve utilizzare il protocollo di query semplice. Il protocollo di query esteso non è supportato.
Verifica l'idoneità della 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 in base alla configurazione attuale, 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 per l'inoltro e viene eseguita localmente sul server primario.
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 che 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, inclusi i costi generali per stabilire la connessione e ripristinare gli snapshot sulla replica.
Monitorare le metriche di forwarding delle query
Per verificare che l'inoltro trasparente delle query funzioni nel tuo carico di lavoro, 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: conteggio query TQF Tipo di metrica: CUMULATIVE Tipo di valore: INT64 Etichette: status: gestione delle query se è attivato l'inoltro trasparente delle query. Questa etichetta registra uno dei seguenti valori:
|