¿Mis bases de datos de AlwaysOn están sincronizadas?

Un grupo de disponibilidad AlwaysOn SQL Server es un ambiente replicado de una o más bases de datos, conocidas como bases de disponibilidad.

Para saber con exactitud cuántos minutos de retraso de sincronización tiene nuestra base de datos réplica en AlwaysOn podemos ejecutar lo siguiente:

SELECT ar.replica_server_name, adc.database_name, ag.name AS ag_name, 
drs.is_primary_replica, drs.synchronization_state_desc, drs.synchronization_health_desc, 
drs.last_sent_time, drs.last_received_time, drs.last_hardened_time, drs.last_redone_time,
drs.log_send_queue_size, drs.log_send_rate, drs.redo_queue_size, drs.redo_rate, 
drs.redo_queue_size/drs.redo_rate,
CASE
        WHEN drs.redo_queue_size = 0 THEN 'sincronizado'
        WHEN drs.redo_queue_size/drs.redo_rate < 60 THEN '< 1'
        WHEN drs.redo_queue_size/drs.redo_rate >= 60 THEN
CAST(drs.redo_queue_size/(drs.redo_rate * 60) AS VARCHAR(10))
    END AS 'Minutos para sincronizacion', drs.last_commit_time
FROM sys.dm_hadr_database_replica_states AS drs
INNER JOIN sys.availability_databases_cluster AS adc
    ON drs.group_id = adc.group_id 
    AND drs.group_database_id = adc.group_database_id
INNER JOIN sys.availability_groups AS ag ON ag.group_id = drs.group_id
INNER JOIN sys.availability_replicas AS ar ON drs.group_id=ar.group_id AND 
drs.replica_id = ar.replica_id
WHERE drs.redo_queue_size IS NOT NULL
ORDER BY ag.name, ar.replica_server_name, adc.database_name;

Al ejecutar esto, obtendremos la siguiente información:

  • replica_server_name: nombre del servidor de la instancia SQL Server que hospeda esta replica.
  • database_name: nombre de la base de datos añadida al Grupo de Disponibilidad.
  • ag_name: nombre del grupo de disponibilidad. Este es un nombre especificado por el usuario y debe ser único dentro del Windows Server Failover Cluster (WSFC).
  • is_primary_replica: 1 si la replica es primaria, 0 si es la replica secundaria. Aplica a: SQL Server 2012 (14.x) en adelante.
  • synchronization_state_desc: Descripción del movimiento de la data. Puede ser: NOT SYNCHRONIZING, SYNCHRONIZING, SYNCHRONIZED, REVERTING y INITIALIZING.
  • synchronization_health_desc: Descripción de la salud de la sincronización. Puede ser: NOT_HEALTHY, HEALTHY o PARTIALLY_HEALTHY.
  • last_sent_time: Hora a la que fue enviado el ultimo bloque de log.
  • last_received_time: Hora a la que el ID de bloque de log en el ultimo mensaje recibido fue leido de la replica secundaria.
  • last_hardened_time: En la base de datos secundaria, hora a la que el identificador de bloque de log para el ultimo LSN reforzado (last_hardened_LSN). En la base de datos primaria, refleja el tiempo correspondiente al minimo LSN reforzado.
  • last_redone_time: Hora a la que se rehizo el ultimo registro de log en el secundario.
  • log_send_queue_size: Cantidad de registros de log de la base primaria que no ha sido enviada a la base secundaria, en kilobytes.
  • log_send_rate: Tasa promedio a la que instancia replica primaria envío datos durante el ultimo periodo activo, en KB/seg.
  • redo_queue_size: Cantidad de registros de log en los archivos log de la replica secundaria que no se ha reecho, en kilobytes.
  • redo_rate: Tasa promedio a la que los registros de log están siendo rehechos en una base de datos dada, en kilobytes/seg.
  • last_commit_time: Hora correspondiente al ultimo registro ‘comiteado’.

Y LISTO!!

Si tienes alguna duda, comentario o sugerencia, puedes mandarme un email a bitácoradeundba@gmail.com.

Deja un comentario