从 SQL Server 配置用于 Fabric 镜像数据库的自动重新初始化

本文介绍了从 SQL Server 实例对数据库进行镜像的自动重新播种功能。

在某些情况下,镜像到 Fabric 的延迟可能会导致事务日志文件使用率增加。 这是因为必须在提交的更改被复制到镜像数据库之后,事务日志才能被截断。 事务日志大小达到其最大定义限制后,写入数据库会失败。 为了保护操作数据库免受关键 OLTP 事务的写入失败的影响,可以设置自动重播机制,使事务日志能够被截断,并将数据库镜像重新初始化以连接到 Fabric。

停止从镜像数据库向 Microsoft Fabric 的事务流,并以当前状态重新初始化镜像功能。 这涉及到生成被配置用于镜像的表的新初始快照,并将其复制到 Microsoft Fabric。 快照后,将同步增量更改。

在重新分配期间,Microsoft Fabric 中的镜像数据库项可用,但在重新分配完成之前不会收到增量更改。 在reseed_state中的sys.sp_help_change_feed_settings列指示重新植入状态。

在 SQL Server 2025 中默认禁用自动重置功能,启用请参见启用自动重置。 自动配置的功能已启用,无法在 Azure SQL 数据库和 Azure SQL 托管实例中对其进行管理或禁用。

在 Fabric 镜像中,监视源 SQL 数据库事务日志。 仅在满足以下三个条件时才会触发自动重播种:

  • 事务日志已满超过@autoreseedthreshold百分比,例如70。 在 SQL Server 上,使用 sys.sp_change_feed_configure_parameters启用该功能时配置此值。
  • 日志重用原因是 REPLICATION
  • REPLICATION由于日志重用等待可能会引发其他功能(如事务复制或 CDC),因此仅在 = 1 时sys.databases.is_data_lake_replication_enabled自动执行。 此值由 Fabric Mirroring 配置。

Diagnose

若要确定 Fabric 镜像是否阻止镜像数据库的日志截断,请检查log_reuse_wait_desc系统目录视图中的sys.databases列以查看原因是否为REPLICATION。 有关日志重用等待类型的详细信息,请参阅 延迟事务日志截断的因素。 例如:

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

如果查询显示 REPLICATION 日志重用等待类型,则由于 Fabric 镜像,事务日志无法清除已提交的事务,并且会继续增加。

使用以下 T-SQL 脚本检查日志总空间以及当前日志使用情况和可用空间:


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];

启用自动重播

如果之前运行的 T-SQL 脚本报告的日志使用率接近满(例如,大于 70%),请考虑通过 sys.sp_change_feed_configure_parameters 系统存储过程启用镜像数据库,以便进行自动重新填充。 例如,若要启用自动重新播种行为:

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

有关详细信息,请参阅 sys.sp_change_feed_configure_parameters

在源数据库中,重新分配应释放镜像所保留的事务日志空间。 在源 SQL Server 数据库上发出手动作CHECKPOINT,如果阻碍原因仍然是由于镜像,则强制释放日志空间。 有关详细信息,请参阅 CHECKPOINT(Transact-SQL)。

手动重排

最佳做法是,可以使用以下存储过程测试特定数据库的手动转储,以便在启用自动重排功能之前了解影响。

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

有关详细信息,请参阅 sys.sp_change_feed_reseed_db_init

检查是否已触发重新播种

  • reseed_state 在源 SQL 数据库上的系统存储过程sys.sp_help_change_feed_settings中的列指示其当前重置状态。

    • 0 = 普通。
    • 1 = 数据库已开始重新初始化到 Fabric 的过程。 转换状态。
    • 2 = 数据库正在重新初始化到 Fabric,并等待复制重启。 转换状态。 建立复制后,重新设定的状态将移动到 0

    有关详细信息,请参阅 sys.sp_help_change_feed_settings

  • 为数据库中启用了镜像的所有表,在7中的state列将具有sys.sp_help_change_feed_table的值。

    有关详细信息,请参阅 sys.sp_help_change_feed_table