优化 SQL Server 中镜像数据库的性能

本文包括优化源数据库和 Microsoft Fabric 中 SQL Server 镜像数据库的性能的重要步骤。

重要

此功能目前为预览版

控制扫描性能

在数据库中的表上启用镜像时,扫描过程会定期通过获取事务日志来捕获更改。 此过程从最早未复制的已提交事务的 LSN 开始,并扫描下一个 N-1 复制的事务,其中 N 表示使用 @maxtrans 参数 sys.sp_change_feed_configure_parameters指定的事务数。 参数 maxtrans 值指示每个扫描周期中要处理的事务数上限。

在扫描延迟非常高的情况下,使用较高的 maxtrans 值可能比较有利,而在涉及稀疏复制或相对较大的事务的情况下,较低的 maxtrans 设置可能更可取。 动态最大事务功能通过根据日志使用情况、扫描延迟和工作负荷等其他因素自动确定每次扫描期间的最佳 maxtrans 值来简化此过程。 dynamicmaxtrans启用更改源设置后,Fabric 会动态调整 maxtrans 参数,确保最佳的扫描性能。

使用 sys.sp_help_change_feed_settings 验证动态最大事务功能的设置,或使用 repl_logscan_dynamic_maxtrans 扩展事件监视每个扫描的运行时值。

若要启用动态最大事务功能,请设置为 @dynamicmaxtrans1. 例如:

USE <Mirrored database name>
GO
EXECUTE sys.sp_change_feed_configure_parameters
  @dynamicmaxtrans=1;

若要修改动态最大事务功能的最大值和下限,请分别使用 @maxtrans@dynamicmaxtranslowerbound 下限。 例如:

USE <Mirrored database name>
GO
EXECUTE sys.sp_change_feed_configure_parameters
  @dynamicmaxtrans=1
, @dynamicmaxtranslowerbound=5
, @maxtrans=5000;

动态最大事务设置注意事项

默认情况下,SQL Server 2025(预览版)中启用了动态最大事务功能。 动态最大事务功能已启用,无法在 Azure SQL 数据库和 Azure SQL 托管实例中管理或禁用。

启用动态 maxtrans 后,镜像进程最多处理 10,000 个事务(默认情况下),或者在日志扫描阶段配置的最大事务值。 为了防止此阶段运行太长,强制实施三分钟的超时。 在超时过期之前处理的任何事务将发布到镜像数据库,其余事务将在下次扫描期间捕获。

动态最大事务功能的最佳值因工作负荷、延迟和其他因素而异。 当延迟高于所需时,请考虑启用动态 maxtrans 功能,并且 transaction_count 在每个批处理中大于下限设置(默认情况下为 200)。 这可以使用列进行监视latency,也可以使用扩展事件sys.dm_change_feed_log_scan_sessions来查看是否repl_logscan_dynamic_maxtrans到达current_maxtransmaxtrans集。 如果延迟仍然很高,请考虑使用maxtrans增加上限。

使用扩展事件 repl_logscan_dynamic_maxtrans 来监视超时是否经常发生。 当扫描超时时,该字段 prev_phase2_scan_termination_reason 将具有一个值 LogScanTerminationReason_MaxScanDurationReached 。 如果注意到频繁超时,请考虑使用 maxtrans 降低或禁用动态 maxtrans。

SQL Server 镜像的资源调控器

在 SQL Server 2025(预览版)中,可以创建资源调控器池来管理和限制 SQL Server 上 Fabric 镜像的工作负荷。 可以使用资源调控器来管理数据库引擎资源消耗,并强制实施用户工作负荷的策略。 资源调控器允许你保留或限制各种服务器资源,包括用户查询工作负载可以使用的 CPU、内存和物理 I/O 量。 这样,就可以保护主要业务工作负荷免受 Fabric Mirroring 更改源数据收集的压力。 有关详细信息,请参阅 资源调控器

若要开始在 SQL Server 2025 for Fabric 镜像中配置工作负荷组,请使用以下示例脚本和说明。

  • 可以为该 RESOURCE POOL名称选择任何名称。
  • 此示例脚本配置所需 CPU 百分比的上限,以允许结构镜像。 以下示例使用 50 50%。 此值是资源池中所有请求在出现 CPU 争用时可以接收的最大平均 CPU 带宽。 使用较低的值进一步限制 Fabric 镜像。
  • 名称 WORKLOAD GROUP 必须与示例脚本中的值匹配。 每个工作负荷组用于镜像的特定阶段。 每个工作负荷组可以位于相同或不同的池中,具体取决于规划资源调控器池和工作负荷的方式。
  • 在首次在 SQL Server 实例上配置资源调控器之前,请仔细查看 资源调控器文档、示例和最佳做法
--Create resource pool for Fabric mirroring
CREATE RESOURCE POOL [ChangeFeedPool] WITH (MAX_CPU_PERCENT = 50);

--Create workload groups for Fabric mirroring. Do not modify.
CREATE WORKLOAD GROUP [x_ms_reserved_changefeed_snapshot_group] USING [ChangeFeedPool];
CREATE WORKLOAD GROUP [x_ms_reserved_changefeed_capture_group] USING [ChangeFeedPool];
CREATE WORKLOAD GROUP [x_ms_reserved_changefeed_publish_group] USING [ChangeFeedPool];
CREATE WORKLOAD GROUP [x_ms_reserved_changefeed_commit_group] USING [ChangeFeedPool];
CREATE WORKLOAD GROUP [x_ms_reserved_changefeed_notification_group] USING [ChangeFeedPool];

若要应用更改并启用资源调控器,请照常:

ALTER RESOURCE GOVERNOR RECONFIGURE