La división de transacciones descarga las solicitudes de lectura dentro de transacciones sin confirmación automática desde la instancia principal hacia las instancias de solo lectura, sin necesidad de modificar el código de la aplicación. Cuando todas las consultas se ejecutan dentro de transacciones con la confirmación automática deshabilitada, la instancia principal procesa cada solicitud, aunque las lecturas no requieran acceso de escritura. La división de transacciones enruta esas lecturas a las instancias de solo lectura antes de que comience cualquier operación de escritura; esto reduce la carga en la instancia principal y mejora su estabilidad.
Requisitos previos
Antes de empezar, asegúrese de cumplir con lo siguiente:
La función de proxy de base de datos habilitada en su instancia de ApsaraDB RDS for PostgreSQL. Consulte Enable the database proxy feature
Funcionamiento
De forma predeterminada, el proxy de base de datos envía todas las solicitudes dentro de una transacción a la instancia principal para preservar la consistencia de lectura y escritura. Esto es necesario para las operaciones de escritura, pero las solicitudes de lectura previas a cualquier escritura también se envían a la instancia principal, incluso cuando las instancias de solo lectura podrían atenderlas de forma segura.
La división de transacciones modifica este comportamiento cuando se cumplen dos condiciones:
El nivel de aislamiento de la transacción es READ COMMITTED (el valor predeterminado de PostgreSQL).
La confirmación automática está deshabilitada (
autocommit = off).
Bajo estas condiciones, el proxy retrasa la apertura de una transacción en la instancia principal hasta la primera operación de escritura. Todas las solicitudes de lectura emitidas antes de esa escritura se enrutan a las instancias de solo lectura a través del load balancer.
La división de transacciones se habilita automáticamente al activar el proxy de base de datos. No es posible deshabilitarla.
Limitaciones
No todas las transacciones pueden dividirse. Compruebe que la división de transacciones sea adecuada para sus cargas de trabajo antes de habilitar el proxy de base de datos.
|
Restricción |
Detalle |
|
Transacciones explícitas |
Las transacciones iniciadas con |
|
Consistencia global |
La división de transacciones no garantiza la consistencia global entre solicitudes. Evalúe esta contrapartida antes de habilitar el proxy de base de datos. |
|
No se puede deshabilitar |
Una vez habilitado el proxy de base de datos, la división de transacciones permanece siempre activa. No existe ninguna opción para desactivarla de forma independiente. |
Cuándo usar la división de transacciones
La división de transacciones funciona mejor cuando su aplicación agrupa consultas con predominio de lecturas en transacciones sin confirmación automática, sin utilizar instrucciones explícitas como BEGIN o START TRANSACTION.
|
Escenario |
¿Es adecuado? |
|
Aplicaciones con confirmación automática deshabilitada y predominio de lecturas antes de las escrituras |
Sí |
|
Transacciones explícitas que usan |
No: las lecturas permanecen en la instancia principal |
|
Cargas de trabajo que requieren consistencia global estricta en todas las lecturas |
No: no se puede garantizar la consistencia global |
Referencia de API
|
Operación |
Descripción |
|
Consulta los detalles de un proxy de base de datos |
|
|
Consulta la información de un endpoint de proxy de base de datos |