Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
@autoreseedthresholdpor 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
REPLICATIONpuede deberse a otras funciones, como la replicación transaccional o CDC, la resincronización automática solo se produce cuandosys.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_statedel procedimiento almacenado del sistemasys.sp_help_change_feed_settingsen 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 a0.
-
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
7para la columnastateensys.sp_help_change_feed_table.Para obtener más información, consulte sys.sp_help_change_feed_table.