En esta página, se describe cómo habilitar, configurar y supervisar el reenvío transparente de consultas en tus instancias de AlloyDB para PostgreSQL. El reenvío transparente de consultas es una función inteligente de optimización de recursos que permite que el nodo principal intercepte las consultas de solo lectura y las reenvíe de forma selectiva a las instancias de grupos de lectura subutilizadas, mientras mantiene la coherencia en la lectura de tus escrituras. Las consultas reenviadas al grupo de lectura producen resultados coherentes con la ejecución del nodo principal.

El reenvío transparente de consultas es más adecuado para las siguientes situaciones:
- Cargas de trabajo híbridas (HTAP): Ejecutas informes o consultas analíticas, con coherencia en la lectura de tus escrituras, en la misma base de datos que controla las transacciones y deseas evitar que las lecturas costosas afecten la latencia de escritura.
- Aplicaciones monolíticas: Deseas usar la capacidad del grupo de lectura sin refactorizar tu aplicación para usar extremos de lectura y escritura separados, mientras que aún requieres una coherencia estricta en la lectura de tus escrituras.
- Administración de carga dinámica: Experimentas aumentos repentinos impredecibles en el tráfico de lectura y deseas que la base de datos transfiera automáticamente el trabajo a los nodos del grupo de lectura cuando el nodo principal esté bajo una carga pesada con coherencia en la lectura de tus escrituras.
Antes de comenzar
Asegúrate de que tu clúster de AlloyDB sea compatible con PostgreSQL 17 o 18.
Debes tener al menos una instancia de grupo de lectura activa configurada en tu clúster de AlloyDB. Para obtener información sobre cómo crear o verificar instancias de grupos de lectura, consulta Crea una instancia de grupo de lectura en un clúster y Visualiza los detalles de la instancia.
Roles obligatorios
- Asegúrate de tener el rol de base de datos
alloydbsuperusero de haber accedido como el usuariopostgrespredeterminado.
Habilita el reenvío transparente de consultas
El reenvío transparente de consultas está inhabilitado de forma predeterminada. Puedes habilitarlo de forma dinámica a nivel de la sesión o de la base de datos sin reiniciar la base de datos.
Habilita a nivel de la sesión
Para habilitar el reenvío transparente de consultas para tu sesión actual, ejecuta el siguiente comando SQL:
SET alloydb.enable_query_forwarding = TRUE;
Habilita a nivel de la base de datos
Para habilitar el reenvío transparente de consultas para una base de datos específica, ejecuta el siguiente comando SQL:
ALTER DATABASE DATABASE_NAME SET alloydb.enable_query_forwarding = ON;
Reemplaza DATABASE_NAME por el nombre de tu base de datos.
Condiciones de elegibilidad de la consulta
- El reenvío transparente de consultas solo se aplica a las instrucciones
SELECTde solo lectura. - La consulta no debe tomar ningún bloqueo a nivel de la fila, como los que se usan en
SELECT ... FOR UPDATE. - El reenvío transparente de consultas tiene compatibilidad limitada con las instrucciones
SELECTdentro de las transacciones de varias declaraciones. - Las consultas no pueden hacer referencia a tablas temporales, no registradas o de catálogo.
- La consulta debe cumplir con las siguientes restricciones de función:
- La consulta no debe contener funciones volátiles ni funciones definidas por el usuario (UDF).
- La consulta no debe contener funciones de valor de SQL, como
CURRENT_DATE,LOCALTIME,USERoCURRENT_SCHEMA. - La consulta no debe contener expresiones
NEXTVAL(). - La consulta no puede contener ningún procedimiento ni función de SQL.
- Todas las columnas de resultados deben usar tipos de datos que implementen funciones de envío y recepción binarias.
- Una consulta solo es apta para el reenvío si su costo general es mínimo en comparación con el costo total de la consulta. Esto significa que, por lo general, se excluyen las consultas que usan análisis de índice, ya que su sobrecarga suele superar el costo de la consulta en sí.
- No se admite el reenvío a un nodo de espera activa de AlloyDB. Un nodo de espera activa de AlloyDB es un nodo secundario dedicado para instancias principales con alta disponibilidad (HA).
Verifica la elegibilidad de la consulta con EXPLAIN
En el siguiente ejemplo, large_table es una tabla en una base de datos con muchas filas. Para verificar si una consulta específica es apta para el reenvío con tu configuración actual, ejecuta el comando EXPLAIN:
EXPLAIN SELECT count(*) FROM large_table t1, large_table t2;
Si la consulta es apta, el resultado incluye una instrucción de estado de reenvío de consultas después del plan de ejecución estándar de Postgres. Si falta esta instrucción, la consulta no es apta para el reenvío de consultas y se ejecuta de forma local en la instancia principal.
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)
En la respuesta de salida, Eligible indica que la consulta cumple con los criterios estándar de SQL de solo lectura y que el análisis de costo-beneficio favorece el enrutamiento a una instancia de grupo de lectura. El parámetro overhead indica el costo del planificador calculado de reenviar la consulta a una instancia de grupo de lectura, incluida la sobrecarga de establecer la conexión y restablecer las instantáneas en la réplica.
Supervisa las métricas de reenvío de consultas
Para verificar que el reenvío transparente de consultas funcione en toda tu carga de trabajo, puedes hacer un seguimiento de la siguiente métrica en Cloud Monitoring:
| Métrica | Descripción | Detalles |
|---|---|---|
alloydb.googleapis.com/internal/database/postgresql/workload/distributed/tqf_query_count |
Es el recuento acumulativo de consultas que controla el reenvío transparente de consultas. | Nombre visible: TQF query count Tipo de métrica: CUMULATIVE Tipo de valor: INT64 Etiquetas: status: Control de consultas si está habilitado el reenvío transparente de consultas. Esta etiqueta registra uno de los siguientes valores:
|