Uso del reenvío de escritura en una base de datos global de Aurora MySQL - Amazon Aurora

Uso del reenvío de escritura en una base de datos global de Aurora MySQL

Disponibilidad regional y por versiones del reenvío de escritura en Aurora MySQL

El reenvío de escritura es compatible con Aurora MySQL 2.08.1 y versiones posteriores en todas las regiones donde estén disponibles las bases de datos globales basadas en Aurora MySQL.

Para obtener más información acerca la disponibilidad regional y por versiones de las bases de datos globales de Aurora MySQL, consulte Bases de datos globales de Aurora con Aurora MySQL.

Habilitación del reenvío de escritura en Aurora MySQL

De forma predeterminada, el reenvío de escritura no está habilitado cuando se agrega un clúster secundario a una base de datos global de Aurora.

Para habilitar el reenvío de escritura mediante la AWS Management Console, elija la casilla de verificación Activar el reenvío de escritura global bajo Reenvío de escritura de réplicas de lectura cuando agregue una región en una base de datos global. Para un clúster secundario existente, modifique el clúster a Activar el reenvío de escritura global. Para desactivar el reenvío de escritura, desactive la casilla de verificación Activar el reenvío de escritura global al agregar la región o modificar el clúster secundario.

Para habilitar el reenvío de escritura mediante la AWS CLI, utilice la opción --enable-global-write-forwarding. Esta opción funciona cuando crea un nuevo clúster secundario mediante el comando create-db-cluster. También funciona cuando modifica un clúster secundario existente mediante el comando modify-db-cluster. Requiere que la base de datos global utilice una versión de Aurora que admita el reenvío de escritura. Puede desactivar el reenvío de escritura mediante la opción --no-enable-global-write-forwarding con estos mismos comandos de la CLI.

Para habilitar el reenvío de escritura mediante la API de Amazon RDS, establezca el parámetro EnableGlobalWriteForwarding en true. Este parámetro funciona cuando crea un nuevo clúster secundario mediante la operación CreateDBCluster. También funciona cuando modifica un clúster secundario existente mediante la operación ModifyDBCluster. Requiere que la base de datos global utilice una versión de Aurora que admita el reenvío de escritura. Puede desactivar el reenvío de escritura estableciendo el parámetro EnableGlobalWriteForwarding en false.

nota

Para que una sesión de base de datos utilice el reenvío de escritura, especifique una configuración para el parámetro de configuración aurora_replica_read_consistency. Haga esto en cada sesión que utilice la característica de reenvío de escritura. Para obtener información acerca de este parámetro, consulte Aislamiento y coherencia del reenvío de escritura en Aurora MySQL.

La característica RDS Proxy no admite el valor SESSION de la variable aurora_replica_read_consistency. Esto puede provocar un comportamiento inesperado.

Los siguientes ejemplos de CLI muestran cómo puede configurar una base de datos global de Aurora con reenvío de escritura habilitado o deshabilitado. Los elementos resaltados representan los comandos y las opciones que son importantes para especificar y mantener la coherencia al configurar la infraestructura de una base de datos global de Aurora.

En el siguiente ejemplo se crea una base de datos global de Aurora, un clúster principal y un clúster secundario con reenvío de escritura habilitado. Sustituya sus propias opciones por el nombre de usuario, la contraseña y las regiones principales y secundarias de AWS.

# Create overall global database. aws rds create-global-cluster --global-cluster-identifier write-forwarding-test \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region us-east-1 # Create primary cluster, in the same AWS Region as the global database. aws rds create-db-cluster --global-cluster-identifier write-forwarding-test \ --db-cluster-identifier write-forwarding-test-cluster-1 \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --master-username user_name --master-user-password password \ --region us-east-1 aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-1 \ --db-instance-identifier write-forwarding-test-cluster-1-instance-1 \ --db-instance-class db.r5.large \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region us-east-1 aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-1 \ --db-instance-identifier write-forwarding-test-cluster-1-instance-2 \ --db-instance-class db.r5.large \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region us-east-1 # Create secondary cluster, in a different AWS Region than the global database, # with write forwarding enabled. aws rds create-db-cluster --global-cluster-identifier write-forwarding-test \ --db-cluster-identifier write-forwarding-test-cluster-2 \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region us-east-2 \ --enable-global-write-forwarding aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \ --db-instance-identifier write-forwarding-test-cluster-2-instance-1 \ --db-instance-class db.r5.large \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region us-east-2 aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \ --db-instance-identifier write-forwarding-test-cluster-2-instance-2 \ --db-instance-class db.r5.large \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region us-east-2

El siguiente ejemplo continúa desde el anterior. Crea un clúster secundario sin el reenvío de escritura habilitado y, a continuación, habilita el reenvío de escritura. Una vez finalizado este ejemplo, todos los clústeres secundarios de la base de datos global tendrán habilitado el reenvío de escritura.

# Create secondary cluster, in a different AWS Region than the global database, # without write forwarding enabled. aws rds create-db-cluster --global-cluster-identifier write-forwarding-test \ --db-cluster-identifier write-forwarding-test-cluster-2 \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region us-west-1 aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \ --db-instance-identifier write-forwarding-test-cluster-2-instance-1 \ --db-instance-class db.r5.large \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region us-west-1 aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \ --db-instance-identifier write-forwarding-test-cluster-2-instance-2 \ --db-instance-class db.r5.large \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region us-west-1 aws rds modify-db-cluster --db-cluster-identifier write-forwarding-test-cluster-2 \ --region us-east-2 \ --enable-global-write-forwarding

Comprobación de si un clúster secundario tiene habilitado el reenvío de escritura

Para determinar si puede utilizar el reenvío de escritura desde un clúster secundario, puede comprobar si el clúster tiene el atributo "GlobalWriteForwardingStatus": "enabled".

En la AWS Management Console, en la pestaña Configuración de la página de detalles del clúster, verá el estado Habilitado para Reenvío de escritura de réplica de lectura global.

Para ver el estado de la configuración de reenvío de escritura global de todos los clústeres, ejecute el siguiente comando de AWS CLI.

Un clúster secundario muestra el valor "enabled" o "disabled" para indicar si el reenvío de escritura está activado o desactivado. Un valor de null indica que el reenvío de escritura no está disponible para ese clúster. O el clúster no forma parte de una base de datos global o es el clúster principal en lugar de un clúster secundario. El valor también puede ser "enabling" o "disabling" si el reenvío de escritura está en proceso de ser activado o desactivado.

aws rds describe-db-clusters \ --query '*[].{DBClusterIdentifier:DBClusterIdentifier,GlobalWriteForwardingStatus:GlobalWriteForwardingStatus}' [ { "GlobalWriteForwardingStatus": "enabled", "DBClusterIdentifier": "aurora-write-forwarding-test-replica-1" }, { "GlobalWriteForwardingStatus": "disabled", "DBClusterIdentifier": "aurora-write-forwarding-test-replica-2" }, { "GlobalWriteForwardingStatus": null, "DBClusterIdentifier": "non-global-cluster" } ]

Para buscar todos los clústeres secundarios que tienen habilitado el reenvío de escritura global, ejecute el siguiente comando. Este comando también devuelve el punto de enlace del lector del clúster. Utilice el punto de conexión del lector del clúster secundario para cuando se utiliza el reenvío de escritura desde el secundario al primario en la base de datos Aurora global.

ejemplo
aws rds describe-db-clusters --query 'DBClusters[].{DBClusterIdentifier:DBClusterIdentifier,GlobalWriteForwardingStatus:GlobalWriteForwardingStatus,ReaderEndpoint:ReaderEndpoint} | [?GlobalWriteForwardingStatus == `enabled`]' [ { "GlobalWriteForwardingStatus": "enabled", "ReaderEndpoint": "aurora-write-forwarding-test-replica-1.cluster-ro-cnpexample.us-west-2.rds.amazonaws.com", "DBClusterIdentifier": "aurora-write-forwarding-test-replica-1" } ]

Compatibilidad de las aplicaciones y SQL con el reenvío de escritura en Aurora MySQL

Puede utilizar los siguientes tipos de instrucciones SQL con reenvío de escritura:

  • Instrucciones de lenguaje de manipulación de datos (DML) como INSERT, DELETE y UPDATE. Existen algunas restricciones sobre las propiedades de estas instrucciones que puede utilizar con el reenvío de escritura, como se describe a continuación.

  • Instrucciones SELECT ... LOCK IN SHARE MODE y SELECT FOR UPDATE.

  • Instrucciones PREPARE y EXECUTE.

Algunas instrucciones no están permitidas o pueden producir resultados obsoletos cuando se utilizan en una base de datos global con reenvío de escritura. Por ello, la configuración EnableGlobalWriteForwarding está desactivada de forma predeterminada para los clústeres secundarios. Antes de activarla, asegúrese de que el código de la aplicación no se vea afectado por ninguna de estas restricciones.

Las siguientes restricciones se aplican a las instrucciones SQL que utiliza con el reenvío de escritura. En algunos casos, puede utilizar las instrucciones en clústeres secundarios con reenvío de escritura habilitado en el nivel de clúster. Este enfoque funciona si el reenvío de escritura no está activado dentro de la sesión por el parámetro de configuración aurora_replica_read_consistency. Intentar usar una instrucción cuando no está permitida por el reenvío de escritura provoca un mensaje de error con el siguiente formato.

ERROR 1235 (42000): This version of MySQL doesn't yet support 'operation with write forwarding'.
Lenguaje de definición de datos (DDL)

Conéctese al clúster principal para ejecutar las instrucciones de lenguaje de definición de datos. No puede ejecutarlas desde instancias de base de datos del lector.

Actualizar una tabla permanente con datos de una tabla temporal

Puede utilizar tablas temporales en clústeres secundarios con el reenvío de escritura habilitado. Sin embargo, no puede utilizar una instrucción DML para modificar una tabla permanente si la instrucción hace referencia a una tabla temporal. Por ejemplo, no puede utilizar una instrucción INSERT ... SELECT que saque los datos de una tabla temporal. La tabla temporal existe en el clúster secundario y no está disponible cuando la instrucción se ejecuta en el clúster principal.

Transacciones XA

No puede utilizar las siguientes instrucciones en un clúster secundario cuando el reenvío de escritura esté activado dentro de la sesión. Puede utilizar estas instrucciones en clústeres secundarios que no tengan habilitado el reenvío de escritura o en sesiones en las que la configuración aurora_replica_read_consistency esté vacía. Antes de activar el reenvío de escritura dentro de una sesión, compruebe si su código utiliza estas instrucciones.

XA {START|BEGIN} xid [JOIN|RESUME] XA END xid [SUSPEND [FOR MIGRATE]] XA PREPARE xid XA COMMIT xid [ONE PHASE] XA ROLLBACK xid XA RECOVER [CONVERT XID]
Instrucciones LOAD para tablas permanentes

No puede utilizar las siguientes instrucciones en un clúster secundario con reenvío de escritura habilitado.

LOAD DATA INFILE 'data.txt' INTO TABLE t1; LOAD XML LOCAL INFILE 'test.xml' INTO TABLE t1;

Puede cargar datos en una tabla temporal de un clúster secundario. Sin embargo, asegúrese de ejecutar cualquier instrucción de LOAD que haga referencia a tablas permanentes solo en el clúster principal.

Instrucciones de complemento

No puede utilizar las siguientes instrucciones en un clúster secundario con reenvío de escritura habilitado.

INSTALL PLUGIN example SONAME 'ha_example.so'; UNINSTALL PLUGIN example;
Declaraciones SAVEPOINT

No puede utilizar las siguientes instrucciones en un clúster secundario cuando el reenvío de escritura esté activado dentro de la sesión. Puede utilizar estas instrucciones en clústeres secundarios que no tengan habilitado el reenvío de escritura o en sesiones en las que la configuración aurora_replica_read_consistency esté en blanco. Compruebe si su código utiliza estas instrucciones antes de activar el reenvío de escritura dentro de una sesión.

SAVEPOINT t1_save; ROLLBACK TO SAVEPOINT t1_save; RELEASE SAVEPOINT t1_save;

Aislamiento y coherencia del reenvío de escritura en Aurora MySQL

En las sesiones que utilizan reenvío de escritura, solo puede utilizar el nivel de aislamiento REPEATABLE READ. Aunque también puede utilizar el nivel de aislamiento READ COMMITTED con clústeres de solo lectura en regiones secundarias de AWS, ese nivel de aislamiento no funciona con el reenvío de escritura. Para obtener información acerca de los niveles de aislamiento de REPEATABLE READ y READ COMMITTED, consulte Niveles de aislamiento de Aurora MySQL.

Puede controlar cuál es el grado de coherencia de lectura en un clúster secundario. El nivel de coherencia de lectura determina cuánto espera el clúster secundario antes de cada operación de lectura para garantizar que algunos de los cambios o todos los cambios se repliquen desde el clúster principal. Puede ajustar el nivel de coherencia de lectura para asegurarse de que todas las operaciones de escritura reenviadas desde la sesión estén visibles en el clúster secundario antes de cualquier consulta posterior. También puede utilizar esta configuración para asegurarse de que las consultas del clúster secundario siempre vean las actualizaciones más recientes del clúster principal. Esto es así incluso para los presentados por otros periodos de sesiones u otros grupos temáticos. Para especificar este tipo de comportamiento para la aplicación, elija un valor para el parámetro de nivel de sesión aurora_replica_read_consistency.

importante

Establezca siempre el parámetro aurora_replica_read_consistency para cualquier sesión para la que desee reenviar escrituras. De lo contrario, Aurora no habilitará el reenvío de escritura en esa sesión. Este parámetro tiene un valor vacío por defecto, por lo que debe elegir un valor específico cuando utilice este parámetro. El parámetro aurora_replica_read_consistency solo tiene efecto en clústeres secundarios donde está habilitado el reenvío de escritura.

Para la versión 2 de Aurora MySQL y la versión 3 anterior a la 3.04, utilice aurora_replica_read_consistency como variable de sesión. Para la versión 3.04 y versiones posteriores de Aurora MySQL, puede usar aurora_replica_read_consistency como variable de sesión o como parámetro de clúster de base de datos.

Para el parámetro aurora_replica_read_consistency, puede especificar los valores EVENTUAL, SESSION, y GLOBAL.

A medida que aumenta el nivel de coherencia, la aplicación pasa más tiempo esperando que los cambios se propaguen entre las regiones de AWS. Puede buscar el equilibrio entre un tiempo de respuesta rápido y asegurarse de que los cambios realizados en otras ubicaciones estén completamente disponibles antes de que se ejecuten las consultas.

Con la coherencia de lectura establecida en EVENTUAL, las consultas en una región secundaria de AWS que utiliza el reenvío de escritura pueden ver datos ligeramente obsoletos debido al retardo de reproducción. Los resultados de las operaciones de escritura de la misma sesión no son visibles hasta que la operación de escritura se realiza en la región principal y se replica en la región actual. La consulta no espera a que los resultados actualizados estén disponibles. Por lo tanto, podría recuperar los datos antiguos o los datos actualizados, en función del momento de las instrucciones y la cantidad de retardo de replicación.

Con la coherencia de lectura establecida en SESSION, todas las consultas de una región secundaria de AWS que utiliza el reenvío de escritura verán los resultados de todos los cambios realizados en esa sesión. Los cambios son visibles independientemente de si la transacción está confirmada. Si es necesario, la consulta espera a que los resultados de las operaciones de escritura reenviadas se repliquen en la región actual. No espera a que se actualicen los resultados de las operaciones de escritura realizadas en otras regiones o en otras sesiones dentro de la región actual.

Con la coherencia de lectura establecida en GLOBAL, una sesión de una región secundaria de AWS verá los cambios realizados por esa sesión. También verá todos los cambios confirmados tanto de la región principal de AWS como de otras regiones secundarias de AWS. Cada consulta puede esperar un tiempo, que variará en función de la cantidad de retardo de la sesión. La consulta continúa cuando el clúster secundario está actualizado con todos los datos confirmados del clúster principal, a partir del momento en que comenzó la consulta.

Para obtener más información sobre todos los parámetros relacionados con el reenvío de escritura, consulte Parámetros de configuración para el reenvío de escritura en Aurora MySQL.

Ejemplos de uso del reenvío de escritura

Estos ejemplos utilizan aurora_replica_read_consistency como variable de sesión. Para la versión 3.04 y versiones posteriores de Aurora MySQL, puede usar aurora_replica_read_consistency como variable de sesión o como parámetro de clúster de base de datos.

En el ejemplo siguiente, el clúster principal se encuentra en la región de US East (N. Virginia) El clúster secundario se encuentra en la región de EE.UU. Este (Ohio). El ejemplo muestra los efectos de ejecutar sentencias INSERT seguidas de instrucciones SELECT. Dependiendo de cuál sea el valor de la configuración aurora_replica_read_consistency, los resultados pueden diferir en función del momento en que se produzcan las instrucciones. Para lograr una mayor coherencia, puede esperar brevemente antes de emitir la instrucción SELECT. O Aurora puede esperar automáticamente hasta que los resultados terminen de replicarse antes de continuar con SELECT.

En este ejemplo, hay una configuración de coherencia de lectura de eventual. Ejecutar una instrucción INSERT inmediatamente seguida de una instrucción SELECT todavía devuelve el valor de COUNT(*). Este valor refleja el número de filas antes de insertar la nueva fila. Al ejecutar SELECT de nuevo poco tiempo después se devuelve el recuento de filas actualizado. Las instrucciones SELECT no esperan.

mysql> set aurora_replica_read_consistency = 'eventual'; mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec) mysql> insert into t1 values (6); select count(*) from t1; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 6 | +----------+ 1 row in set (0.00 sec)

Con una configuración de coherencia de lectura de session, una instrucción SELECT inmediatamente después de una instrucción INSERT espera hasta que los cambios de la instrucción INSERT sean visibles. Las instrucciones SELECT posteriores no esperan.

mysql> set aurora_replica_read_consistency = 'session'; mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 6 | +----------+ 1 row in set (0.01 sec) mysql> insert into t1 values (6); select count(*) from t1; select count(*) from t1; Query OK, 1 row affected (0.08 sec) +----------+ | count(*) | +----------+ | 7 | +----------+ 1 row in set (0.37 sec) +----------+ | count(*) | +----------+ | 7 | +----------+ 1 row in set (0.00 sec)

Con la configuración de coherencia de lectura todavía establecida en session, al introducir una breve espera después de realizar una instrucción INSERT, el recuento de filas actualizado estará disponible para cuando se ejecute la siguiente instrucción SELECT.

mysql> insert into t1 values (6); select sleep(2); select count(*) from t1; Query OK, 1 row affected (0.07 sec) +----------+ | sleep(2) | +----------+ | 0 | +----------+ 1 row in set (2.01 sec) +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.00 sec)

Con una configuración de coherencia de lectura de global, cada instrucción SELECT espera para asegurarse de que todos los cambios de datos que se realicen a partir de la hora de inicio de la instrucción sean visibles antes de realizar la consulta. La cantidad de espera de cada instrucción SELECT varía en función de la cantidad de retardo de replicación entre los clústeres principal y secundario.

mysql> set aurora_replica_read_consistency = 'global'; mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.75 sec) mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.37 sec) mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.66 sec)

Ejecución de instrucciones multiparte con reenvío de escritura en Aurora MySQL

Una instrucción DML puede constar de varias partes, como una instrucción INSERT ... SELECT o una instrucción DELETE ... WHERE. En este caso, la instrucción completa se reenvía al clúster principal y se ejecuta allí.

Transacciones con reenvío de escritura en Aurora MySQL

Que la transacción se reenvíe al clúster principal o no depende del modo de acceso de la transacción. Puede especificar el modo de acceso de la transacción mediante la instrucción SET TRANSACTION o la instrucción START TRANSACTION. También puede cambiar el valor de la variable de sesión transaction_read_only para especificar el modo de acceso de la transacción. Solo puede cambiar este valor de sesión cuando esté conectado a un clúster de base de datos que tenga habilitado el reenvío de escritura.

Si una transacción de larga duración no emite ninguna instrucción durante un período de tiempo significativo, podría exceder el período de tiempo de espera de inactividad. Este período tiene un valor predeterminado de un minuto. Puede aumentarlo hasta un día. El clúster principal cancela las transacciones que superan el tiempo de espera de inactividad. La siguiente instrucción que envíe recibirá un error de tiempo de espera. A continuación, Aurora revertirá la transacción.

Este tipo de error puede producirse en otros casos cuando el reenvío de escritura deja de estar disponible. Por ejemplo, Aurora cancela cualquier transacción que utilice reenvío de escritura si reinicia el clúster principal o si desactiva la configuración de reenvío de escritura.

Parámetros de configuración para el reenvío de escritura en Aurora MySQL

Los grupos de parámetros del clúster de Aurora contienen nuevos ajustes para la característica de reenvío de escritura. Como se trata de parámetros de clúster, todas las instancias de base de datos de cada clúster tienen los mismos valores para estas variables. Los detalles sobre estos parámetros se resumen en la tabla siguiente, con notas de uso después de la tabla.

Nombre Ámbito Tipo Valor predeterminado Valores válidos
aurora_fwd_master_idle_timeout (Aurora MySQL, versión 2) Global entero sin signo 60 1-86 400
aurora_fwd_master_max_connections_pct (Aurora MySQL, versión 2) Global entero largo sin signo 10 0–90
aurora_fwd_writer_idle_timeout (Aurora MySQL, versión 3) Global entero sin signo 60 1-86 400
aurora_fwd_writer_max_connections_pct (Aurora MySQL, versión 3) Global entero largo sin signo 10 0–90
aurora_replica_read_consistency Session Enum '' (null) EVENTUAL, SESSION, GLOBAL

Para controlar las solicitudes de escritura entrantes de clústeres secundarios, utilice esta configuración en el clúster principal:

  • aurora_fwd_master_idle_timeout,:aurora_fwd_writer_idle_timeout la cantidad de segundos que el clúster principal espera actividad en una conexión que se reenvía desde un clúster secundario antes de cerrarla. Si la sesión permanece inactiva al finalizar este período, Aurora la cancela.

  • aurora_fwd_master_max_connections_pct,:aurora_fwd_writer_max_connections_pct el límite superior en conexiones de base de datos que se puede utilizar en una instancia de base de datos de escritor para gestionar las consultas reenviadas desde los lectores. Se expresa como un porcentaje de la configuración max_connections de la instancia de base de datos de escritor en el clúster principal. Por ejemplo, si max_connections es 800 y aurora_fwd_master_max_connections_pct o aurora_fwd_writer_max_connections_pct es 10, el escritor permite un máximo de 80 sesiones reenviadas simultáneas. Estas conexiones provienen del mismo grupo de conexiones administrado por la configuración max_connections.

    Esta configuración solo se aplica en el clúster principal, cuando uno o más clústeres secundarios tienen habilitado el reenvío de escritura. Si disminuye el valor, las conexiones existentes no se ven afectadas. Aurora tendrá en cuenta el nuevo valor de la configuración al intentar crear una nueva conexión desde un clúster secundario. El valor predeterminado es 10, que representa el 10% del valor max_connections. Si habilita el reenvío de consultas en cualquiera de los clústeres secundarios, esta configuración debe tener un valor distinto de cero para que las operaciones de escritura de clústeres secundarios se realicen correctamente. Si el valor es cero, las operaciones de escritura recibirán el código de error ER_CON_COUNT_ERROR con el mensaje Not enough connections on writer to handle your request.

El parámetro aurora_replica_read_consistency es un parámetro de nivel de sesión que permite el reenvío de escritura. Usted lo usa en cada sesión. Puede especificar EVENTUAL, SESSION o GLOBAL para el nivel de coherencia de lectura. Para obtener más información sobre los niveles de consistencia, consulte Aislamiento y coherencia del reenvío de escritura en Aurora MySQL. Las siguientes reglas se aplican a este parámetro:

  • Este es un parámetro de nivel de sesión. El valor predeterminado es '' (vacío).

  • El reenvío de escritura solo está disponible en una sesión si aurora_replica_read_consistency está establecido en EVENTUAL, SESSION o GLOBAL. Este parámetro solo es relevante en instancias de lector de clústeres secundarios que tienen habilitado el reenvío de escritura y que se encuentran en una base de datos global de Aurora.

  • No puede establecer esta variable (cuando está vacía) o sin establecer (cuando ya está configurada) dentro de una transacción multideclaración. Sin embargo, puede cambiarlo de un valor válido (EVENTUAL, SESSION o GLOBAL) a otro valor válido (EVENTUAL, SESSION o GLOBAL) durante una transacción de este tipo.

  • La variable no puede ser SET cuando el reenvío de escritura no está habilitado en el clúster secundario.

  • Establecer la variable de sesión en un clúster principal no tiene ningún efecto. Si intenta modificar esta variable en un clúster principal, recibirá un error.

Métricas de Amazon CloudWatch para el reenvío de escritura en Aurora MySQL

Las siguientes métricas de Amazon CloudWatch y variables de estado de Aurora MySQL se aplican al clúster principal cuando se utiliza el reenvío de escritura en uno o más clústeres secundarios. Todas estas métricas se miden en la instancia de base de datos de escritor del clúster principal.

Métrica de CloudWatch Variable de estado de Aurora MySQL Unidad Descripción

AuroraDMLRejectedMasterFull

Recuento

El número de consultas reenviadas que se han rechazado porque la sesión en la instancia de base de datos de escritura está completa.

Para Aurora MySQL, versión 2.

AuroraDMLRejectedWriterFull

Recuento

El número de consultas reenviadas que se han rechazado porque la sesión en la instancia de base de datos de escritura está completa.

Para Aurora MySQL versión 3.

ForwardingMasterDMLLatency

Milisegundos

Tiempo medio para procesar cada instrucción DML reenviada en la instancia de base de datos de escritor.

No incluye el tiempo que tarda el clúster secundario en reenviar la solicitud de escritura ni el tiempo necesario para replicar los cambios en el clúster secundario.

Para Aurora MySQL, versión 2.

ForwardingMasterDMLThroughput

Recuento por segundo

Número de instrucciones DML reenviadas procesadas cada segundo por esta instancia de base de datos de escritor.

Para Aurora MySQL, versión 2.

ForwardingMasterOpenSessions

Aurora_fwd_master_open_sessions Recuento

Número de sesiones reenviadas en la instancia de base de datos de escritor.

Para Aurora MySQL, versión 2.

Aurora_fwd_master_dml_stmt_count Recuento

Número total de instrucciones DML reenviadas a esta instancia de base de datos de escritor.

Para Aurora MySQL, versión 2.

Aurora_fwd_master_dml_stmt_duration Microsegundos

Duración total de las instrucciones DML reenviadas a esta instancia de base de datos de escritor.

Para Aurora MySQL, versión 2.

Aurora_fwd_master_select_stmt_count Recuento

Número total de instancias SELECT reenviadas a esta instancia de base de datos de escritor.

Para Aurora MySQL, versión 2.

Aurora_fwd_master_select_stmt_duration Microsegundos

Duración total de las instrucciones SELECT reenviadas a esta instancia de base de datos de escritor.

Para Aurora MySQL, versión 2.

ForwardingWriterDMLLatency

Milisegundos

Tiempo medio para procesar cada instrucción DML reenviada en la instancia de base de datos de escritor.

No incluye el tiempo que tarda el clúster secundario en reenviar la solicitud de escritura ni el tiempo necesario para replicar los cambios en el clúster secundario.

Para Aurora MySQL versión 3.

ForwardingWriterDMLThroughput

Recuento por segundo

Número de instrucciones DML reenviadas procesadas cada segundo por esta instancia de base de datos de escritor.

Para Aurora MySQL versión 3.

ForwardingWriterOpenSessions

Aurora_fwd_writer_open_sessions Recuento

Número de sesiones reenviadas en la instancia de base de datos de escritor.

Para Aurora MySQL versión 3.

Aurora_fwd_writer_dml_stmt_count Recuento

Número total de instrucciones DML reenviadas a esta instancia de base de datos de escritor.

Para Aurora MySQL versión 3.

Aurora_fwd_writer_dml_stmt_duration Microsegundos Duración total de las instrucciones DML reenviadas a esta instancia de base de datos de escritor.

Aurora_fwd_writer_select_stmt_count Recuento

Número total de instancias SELECT reenviadas a esta instancia de base de datos de escritor.

Para Aurora MySQL versión 3.

Aurora_fwd_writer_select_stmt_duration Microsegundos

Duración total de las instrucciones SELECT reenviadas a esta instancia de base de datos de escritor.

Para Aurora MySQL versión 3.

Las siguientes métricas de CloudWatch y variables de estado de Aurora MySQL se aplican a cada clúster secundario. Estas métricas se miden en cada instancia de base de datos de lector de un clúster secundario con reenvío de escritura habilitado.

Métrica de CloudWatch Variable de estado de Aurora MySQL Unidad Descripción

ForwardingReplicaDMLLatency

Milisegundos Tiempo medio de respuesta de los DML reenviados durante la réplica.

ForwardingReplicaDMLThroughput

Recuento por segundo Número de sentencias DML reenviadas procesadas por segundo.

ForwardingReplicaOpenSessions

Aurora_fwd_replica_open_sessions Recuento Número de sesiones que utilizan el reenvío de escritura en una instancia de base de datos del lector.

ForwardingReplicaReadWaitLatency

Milisegundos

Tiempo de espera medio que una instrucción SELECT de una instancia de base de datos del lector espera para ponerse al día con el clúster principal.

El grado en que la instancia de base de datos de lector espera antes de procesar una consulta depende de la configuración aurora_replica_read_consistency.

ForwardingReplicaReadWaitThroughput

Recuento por segundo Número total de SELECT instrucciones procesadas cada segundo en todas las sesiones que reenvían escrituras.

ForwardingReplicaSelectLatency

(–) Milisegundos Latencia SELECT reenviada, media sobre todas las declaraciones SELECT reenviadas dentro del periodo de monitoreo.

ForwardingReplicaSelectThroughput

Recuento por segundo Rendimiento SELECT reenviado, media por segundo dentro del  período de supervisión.

Aurora_fwd_replica_dml_stmt_count Recuento Número total de instrucciones DML reenviadas desde esta instancia de base de datos de lector.

Aurora_fwd_replica_dml_stmt_duration Microsegundos Duración total de las instrucciones DML reenviadas desde esta instancia de base de datos de lector.

Aurora_fwd_replica_errors_session_limit Recuento

Número de sesiones rechazadas por el clúster principal debido a una de las siguientes condiciones de error:

  • writer full

  • Too many forwarded statements in progress.

Aurora_fwd_replica_read_wait_count Recuento Número total de esperas de lectura tras escritura en esta instancia de base de datos del lector.

Aurora_fwd_replica_read_wait_duration Microsegundos Duración total de las esperas debido a la configuración de coherencia de lectura en esta instancia de base de datos de lector.

Aurora_fwd_replica_select_stmt_count Recuento Número total de instrucciones SELECT reenviadas desde esta instancia de base de datos de lector.

Aurora_fwd_replica_select_stmt_duration Microsegundos Duración total de las instrucciones SELECT reenviadas desde esta instancia de base de datos de lector.