本文介绍了从 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。