Configurar la reinicialización automática para bases de datos reflejadas en Fabric desde SQL Server

Este artículo describe la re-segmentación automática para el reflejo de una base de datos desde una instancia de SQL Server.

En ciertas situaciones, los retrasos en el reflejo a Microsoft Fabric pueden provocar un mayor uso de archivos de registro de transacciones. Este aumento se produce porque el registro de transacciones no puede truncarse hasta que los cambios confirmados se repliquen en la base de datos reflejada. Una vez que el tamaño del registro de la transacción alcanza su límite máximo definido, las escrituras en la base de datos fallan. Para proteger las bases de datos operativas contra fallos de escritura en transacciones OLTP críticas, puede configurar un mecanismo de autorresiembra que permita truncar el registro de transacciones y reinicializar la duplicación de la base de datos en Fabric.

Un reseed detiene el flujo de transacciones a Fabric desde la base de datos espejada y reinicializa el reflejo en el estado actual. Este proceso implica generar una nueva instantánea inicial de las tablas configuradas para el espejamiento y replicar esa instantánea en Fabric. Después de la instantánea, se replican los cambios incrementales.

Durante la reinicialización, el elemento reflejado de la base de datos en Fabric está disponible, pero no recibe cambios incrementales hasta que se completa la reinicialización. La columna reseed_state de sys.sp_help_change_feed_settings indica el estado de resincronización.

La función de resembra automática está desactivada por defecto en SQL Server 2025. Para habilitarlo, consulta Activar resembra automática. En Azure SQL Database y Azure SQL Managed Instance, esta función está habilitada y no puedes gestionarla ni desactivarla.

En la creación de reflejos de Fabric, se supervisa el registro de transacciones de la base de datos SQL de origen. Una resiembra automática solo se desencadena cuando se cumplen las tres condiciones siguientes:

  • El registro de transacciones está lleno en más de un @autoreseedthreshold por ciento, por ejemplo, 70. En SQL Server, configura este valor cuando actives la función, usando sys.sp_change_feed_configure_parameters.
  • El motivo de reutilización del registro es REPLICATION.
  • Dado que la espera para la reutilización del registro de REPLICATION puede deberse a otras funciones, como la replicación transaccional o CDC, la resincronización automática solo se produce cuando sys.databases.is_data_lake_replication_enabled = 1. Este valor lo configura Fabric Mirroring.

Diagnose

Para identificar si la creación de reflejos de Fabric está impidiendo el truncamiento del registro de transacciones en una base de datos reflejada, compruebe la columna log_reuse_wait_desc de la vista del catálogo del sistema sys.databases para determinar si el motivo es REPLICATION. Para obtener más información sobre los tipos de espera de reutilización del registro, consulte Factores que retrasan el truncamiento del registro de transacciones. Por ejemplo:

SELECT [name], log_reuse_wait_desc 
FROM sys.databases 
WHERE is_data_lake_replication_enabled = 1;

Si la consulta muestra REPLICATION el tipo de espera para la reutilización del registro, entonces, debido a la replicación espejo de Fabric, el registro de transacciones no puede vaciar las transacciones confirmadas y sigue llenándose.

Use el siguiente script de T-SQL para comprobar el espacio total del registro y el uso actual del registro y el espacio disponible:


USE <Mirrored database name>
GO 
--initialize variables
DECLARE @total_log_size bigint = 0; 
DECLARE @used_log_size bigint = 0;
DECLARE @size int;
DECLARE @max_size int;
DECLARE @growth int;

--retrieve total log space based on number of log files and growth settings for the database
DECLARE sdf CURSOR
FOR
SELECT SIZE*1.0*8192/1024/1024 AS [size in MB],
            max_size*1.0*8192/1024/1024 AS [max size in MB],
            growth
FROM sys.database_files
WHERE TYPE = 1 
OPEN sdf 
FETCH NEXT FROM sdf INTO @size,
                @max_size,
                @growth 
WHILE @@FETCH_STATUS = 0 
BEGIN
SELECT @total_log_size = @total_log_size + 
CASE @growth
        WHEN 0 THEN @size
        ELSE @max_size
END 
FETCH NEXT FROM sdf INTO @size,
              @max_size,
              @growth 
END 
CLOSE sdf;
DEALLOCATE sdf;

--current log space usage
SELECT @used_log_size = used_log_space_in_bytes*1.0/1024/1024
FROM sys.dm_db_log_space_usage;

-- log space used in percent
SELECT @used_log_size AS [used log space in MB],
       @total_log_size AS [total log space in MB],
       @used_log_size/@total_log_size AS [used log space in percentage];

Habilitar autoreed

Si el uso de registro devuelto por el script anterior de T-SQL está cerca de estar completo (por ejemplo, superior a 70%), considera habilitar la base de datos espejada para la reseminación automática mediante el sys.sp_change_feed_configure_parameters procedimiento almacenado del sistema. Por ejemplo, para habilitar el comportamiento de autoreseed:

USE <Mirrored database name>
GO
EXECUTE sys.sp_change_feed_configure_parameters 
  @autoreseed = 1
, @autoreseedthreshold = 70; 

Para obtener más información, consulte sys.sp_change_feed_configure_parameters.

En la base de datos de origen, el proceso de reinicialización debe liberar el espacio del registro de transacciones retenido por la creación de reflejo. Si la razón del retraso sigue REPLICATION siendo por el espejado, publica un manual CHECKPOINT en la base de datos de SQL Server de origen para forzar la liberación del espacio de log. Para obtener más información, vea CHECKPOINT (Transact-SQL).

Reseado manual

Recomendamos que pruebe la regeneración manual de una base de datos específica mediante el siguiente procedimiento almacenado, para que comprenda las implicaciones antes de activar la regeneración automática.

USE <Mirrored database name>
GO
EXECUTE sp_change_feed_reseed_db_init @is_init_needed = 1;

Para obtener más información, consulte sys.sp_change_feed_reseed_db_init.

Compruebe si se ha iniciado una reinicialización

  • La columna reseed_state del procedimiento almacenado del sistema sys.sp_help_change_feed_settings en la base de datos SQL de origen muestra el estado actual de reseed.

    • 0 = Normal.
    • 1 = La base de datos ha iniciado el proceso de reinicialización en Fabric. Estado transitorio.
      • 2= La base de datos se está reinicializando en Fabric y esperando a que la replicación se reinicie. Estado transitorio. Una vez establecida la replicación, el estado de resincronización cambia a 0.

    Para obtener más información, consulte sys.sp_help_change_feed_settings.

  • Todas las tablas de la base de datos habilitadas para la duplicación tienen un valor de 7 para la columna state en sys.sp_help_change_feed_table.

    Para obtener más información, consulte sys.sp_help_change_feed_table.