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

5 minutos de lectura
0

Tengo una instancia de Amazon Relational Database Service (Amazon RDS) para Microsoft SQL Server con réplica de lectura. Quiero solucionar el retraso de la réplica en mi instancia de Amazon RDS para SQL Server.

Descripción corta

Amazon RDS para SQL Server Enterprise Edition admite la creación de réplicas de lectura en la misma región de AWS y entre regiones. La replicación de datos es asincrónica y utiliza la tecnología Always-On para replicar los datos de una instancia principal a una instancia de réplica. RDS para SQL Server no reduce automáticamente el alto retraso de réplica entre una instancia de base de datos de origen y sus réplicas de lectura.

Resolución

Comprobación de la utilización de los recursos

Utilice la supervisión mejorada de Amazon CloudWatch y Performance Insights para comprobar el uso de los recursos en sus instancias principales y replicadas de forma detallada.

Confirme que el uso de la CPU no esté limitado. Si usa un tipo de instancia con ráfagas, asegúrese de tener créditos de CPU disponibles o de haber activado el modo ilimitado.

Asegúrese de que haya suficiente FreeableMemory y de que ReadIOPS y WriteIOPS cumplan con las cuotas aprovisionadas. Si utiliza un volumen gp2, confirme que tiene un saldo de ráfagas disponible.

Compruebe si ReadThroughput y WriteThroughput alcanzaron las cuotas de tipos de instancia.

Nota: La falta de recursos en la instancia de réplica puede provocar un retraso en la réplica. Se recomienda crear las instancias principales y de réplica con el mismo tipo de instancia, tipo de almacenamiento y cantidad de IOPS.  También puede escalar o desescalar verticalmente la réplica de lectura cuando el uso sea mínimo en comparación con la instancia principal.

Identifique el periodo de tiempo en el que el retraso de la réplica comenzó a aumentar y, a continuación, tome las siguientes medidas:

  • Compruebe las métricas WriteIOPS, WriteThroughput, NetworkReceiveThroughput y NetworkTrasmitThroughput en la instancia principal. Determine si la actividad de escritura provocó el retraso. A continuación, compruebe las mismas métricas en el mismo periodo de tiempo en la réplica de lectura.
  • Compruebe si hay transacciones de larga duración en la instancia principal. Para comprobar el estado de las transacciones activas, ejecute una consulta similar a la del siguiente ejemplo:
    SELECT *
    FROM sys.sysprocesses
    WHERE open_tran = 1;

Identificación de las esperas y los interbloqueos

Compruebe si hay esperas o interbloqueos importantes en la instancia de réplica. Se producen interbloqueos entre las transacciones Select y DDL/DML y provocan retrasos en la aplicación de los registros de transacciones de la instancia principal.

Para comprobar si hay bloqueos, ejecute una consulta similar a la del siguiente ejemplo:

SELECT * FROM sys.sysprocesses WHERE blocked > 0;

Comprobación del retraso de la réplica

Ejecute una consulta en la instancia principal para comprobar el retraso de la réplica y el retraso máximo de la réplica.

Retraso de la réplica

Ejecute la siguiente consulta:

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;

Nota: Sustituya database_name por el nombre de la base de datos.

Verifique que el último valor de last_hardened_lsn avance en la réplica de lectura.

Retraso máximo de la réplica

Para SQL Server, la métrica ReplicaLag es el retraso máximo de las bases de datos que están atrasadas en segundos. Por ejemplo, si tiene dos bases de datos que tienen un retraso de 5 y 10 segundos, ReplicaLag es de 10 segundos. Para calcular la métrica ReplicaLag, ejecute la siguiente consulta en la instancia principal:

SELECT max(secondary_lag_seconds) max_lag
FROM sys.dm_hadr_database_replica_states;

Administración de la sincronización de datos y el estado de las instancias

Al crear una réplica de lectura, Amazon RDS toma una instantánea de la instancia principal y, a continuación, la restaura para crear una instancia de réplica de lectura. Amazon RDS reproduce los registros de transacciones para sincronizar los datos con la instancia principal. Sin embargo, después de crear una instancia nueva, la instancia experimenta una carga lenta que provoca un retraso en la réplica. Este es el comportamiento esperado. Para reducir los efectos de la carga diferida, utilice los tipos de volumen io1 o io2 al crear la réplica de lectura. Tras crear la réplica, puede volver a convertirla a un tipo de volumen gp2 o gp3.

Ejecute las transacciones en lotes en la instancia principal para evitar transacciones largas y reducir el tamaño del archivo de registro de transacciones. Reinicie la instancia de réplica solo cuando sea necesario durante un retraso de réplica alto. De lo contrario, Amazon RDS retrasa la reproducción de los registros de transacciones y es posible que las bases de datos pasen al estado de recuperación.

Como los registros se procesan desde la instancia principal, es posible que se produzca un retraso temporal en la réplica al modificar el tipo de instancia en la instancia principal o en la réplica.

Además, al modificar el tipo de almacenamiento o el tamaño del almacenamiento, es posible que se produzca un retraso temporal en la réplica hasta que se complete la optimización del almacenamiento. No puede supervisar el progreso de la optimización del almacenamiento.

Si sigue experimentando retrasos en la réplica, compruebe el estado de las bases de datos de usuario en la instancia de réplica. Para reproducir los registros, el estado de la base de datos debe ser En línea.

Nota:

  • Amazon RDS incluye las bases de datos recién creadas en el cálculo del retraso solo después de que estén accesibles en la réplica de lectura.
  • ReplicaLag devuelve**-1** cuando Amazon RDS no puede determinar el retraso, por ejemplo, durante la configuración de la réplica o cuando la réplica leída está en estado de error.

Información relacionada

Uso de réplicas de lectura para Microsoft SQL Server en Amazon RDS