从 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

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

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