¿Cómo soluciono el retraso en mi réplica de lectura de RDS para SQL Server?

6 minutos de lectura
0

Tengo una instancia de Amazon Relational Database Service (Amazon RDS) para Microsoft SQL Server con réplica de lectura. Veo una de las siguientes opciones en mi instancia de base de datos:

Hay un aumento repentino en el retraso de la réplica. La modificación de la instancia comenzó a provocar un retraso en la réplica. La base de datos de la instancia de réplica leída no está accesible.

¿Cómo puedo solucionar estos problemas?

Descripción corta

La edición empresarial de Amazon RDS para SQL Server admite la creación de una réplica de lectura dentro de la misma región. La replicación de datos es asincrónica y utiliza la tecnología Always-On (“siempre conectado”, en español) para replicar los datos de una instancia maestra a una réplica. RDS para SQL Server no interviene para mitigar el elevado retraso de réplica entre una instancia de base de datos de origen y sus réplicas de lectura.

Resolución

1.    Compruebe la utilización de los recursos en la instancia maestra y de réplica con Amazon CloudWatch. Utilice las funciones de monitoreo mejorado e información de rendimiento para comprobar el uso de los recursos de forma granular.

Consideraciones importantes sobre las métricas de las instancias maestras y de réplica:

2.    Se recomienda crear las instancias maestras y de réplica con la misma clase de instancia, tipo de almacenamiento y cantidad de IOPS. Esto evita el retraso de la réplica debido a la falta de recursos en la instancia de réplica. Además, según la carga de trabajo, la réplica de lectura se puede escalar o desescalar verticalmente si el uso es mínimo en comparación con la instancia maestra.

3.    Identifique el periodo en el que el retraso de la réplica comenzó a aumentar y, a continuación, haga lo siguiente:

Compruebe las métricas WriteIOPS, WriteThroughput, NetworkReceiveThroughput y NetworkTrasmitThroughput en la instancia maestra en función de la hora de inicio del retraso. Determina si el retraso se debe a la actividad de escritura. Compruebe las mismas métricas en el mismo periodo de tiempo en la réplica de lectura.

Comprueba si hay transacciones de larga duración en la instancia maestra. A continuación se muestra un ejemplo de consulta para comprobar el estado de las transacciones activas:

SELECT * FROM sys.sysprocesses WHERE open_tran = 1;

4.    En la instancia de réplica, compruebe si hay algún bloqueo de espera o interbloqueo significativo. Se producen interbloqueos entre las transacciones Select y DDL/DML, lo que provoca retrasos en la aplicación de los registros de transacciones desde la instancia maestra.

A continuación, se muestra un ejemplo de consulta para comprobar el bloqueo:

SELECT * FROM sys.sysprocesses WHERE blocked > 0;

5.    Consulta para comprobar el retraso de la réplica y el retraso máximo de la réplica.

Retardo de réplica

SELECT AR.replica_server_name
     , DB_NAME (ARS.database_id) 'database_name'
     , AR.availability_mode_desc
     , ARS.synchronization_health_desc
     , ARS.last_hardened_lsn
     , ARS.last_redone_lsn
     , ARS.secondary_lag_seconds
FROM sys.dm_hadr_database_replica_states ARS
INNER JOIN sys.availability_replicas AR ON ARS.replica_id = AR.replica_id
--WHERE DB_NAME(ARS.database_id) = 'database_name'
ORDER BY AR.replica_server_name;

Compruebe que el valor last_hardened_lsn progresa en la réplica de lectura.

Retardo máximo de réplica

Para SQL Server, la métrica ReplicaLag es el retraso máximo de las bases de datos que se han quedado atrás, en segundos. Por ejemplo, si tiene dos bases de datos con un retraso de 5 y 10 segundos, respectivamente, entoncesReplicaLag dura 10 segundos. La métrica ReplicaLag devuelve el valor de la siguiente consulta. Ejecute la consulta en la instancia maestra.

select max(secondary_lag_seconds) max_lag  from sys.dm_hadr_database_replica_states;

6.    Tras iniciar la creación de la réplica de lectura, se toma una instantánea de la instancia maestra y, a continuación, se restaura para crear una instancia de réplica de lectura. Los registros de transacciones se reproducen para sincronizar los datos con la instancia maestra. Sin embargo, después de crear una nueva instancia, esa instancia experimenta una carga lenta, lo que provoca un retraso en la réplica. Este es el comportamiento esperado. Para minimizar el efecto de la carga diferida, utilice el almacenamiento de tipo IO1 durante la creación de la réplica de lectura y, a continuación, vuelva a convertirlo a GP2 si es necesario.

7.    Ejecute transacciones en lotes en la instancia maestra. Esto evita la ejecución de transacciones largas y mantiene el tamaño del archivo de registro de transacciones al mínimo. No reinicie la instancia de réplica a menos que sea necesario durante un retraso de réplica elevado, ya que esto retrasa aún más la reproducción de los registros de transacciones.

8.    La modificación de la clase de instancia en la instancia maestra o de réplica podría provocar un retraso temporal en la réplica. Este es el comportamiento esperado porque los registros se procesan desde la instancia maestra.

Cambiar el tipo de almacenamiento o el tamaño del almacenamiento tiene un impacto más prolongado en el retraso de la réplica hasta que se complete la optimización del almacenamiento. No es posible saber cuánto porcentaje de optimización del almacenamiento se ha completado en las instancias de RDS.

9.    Si la réplica de lectura alcanza el estado Storage full (Almacenamiento lleno), los registros de transacciones de la instancia maestra no se procesan y el retraso de la réplica aumenta.

Si sospecha que el espacio de almacenamiento se debe a tablas temporales o a TempDB, reinicie la instancia de réplica para liberar espacio temporalmente.

10.    Si no experimenta ningún progreso en el estado de retraso de la réplica, compruebe el estado de las bases de datos de usuarios en la instancia de réplica. Para reproducir los registros, el estado de la base de datos debe ser Online (En línea).

Tenga en cuenta lo siguiente:

  • Las bases de datos recién creadas no se incluyen en el cálculo del retraso hasta que se pueda acceder a ellas en la réplica de lectura.
  • ReplicaLag devuelve -1 si RDS no puede determinar el retraso, por ejemplo, durante la configuración de la réplica o cuando la réplica de lectura devuelve un error.

Información relacionada

Working with read replicas for Microsoft SQL Server in Amazon RDS (Trabajo con réplicas de lectura para Microsoft SQL Server en Amazon RDS)