适用于: SQL Server 2025 (17.x)
使用服务器配置选项max ucs send boxcars来控制最大可用于将消息从主副本发送到次要副本的UCS boxcar的数量。 此选项可用于通过广域网络(WAN)在 Always On 可用性组中控制副本之间的数据流。
注释
从 SQL Server 2025(17.x)开始,服务器 max ucs send boxcars 配置选项可用。
概述
通用通信服务 (UCS) 协议由 SQL Server Always On 可用性组 用来在主要副本和次要副本之间发送日志块。 UCS 通过测量主要副本接收确认在辅助副本上强化更改所需的时间来确定次要副本是否落后于主副本。
当 UCS 在终端之间进行通信时,如果检测到次要副本无法跟上应用主要副本的更改,它将进入流控制。 此过程非常适合在网络延迟不是因素的快速本地网络中使用,因为延迟的主要部分归因于在次要副本上的处理。 但是,当 UCS 通过广域网(WAN)进行通信时,如果网络滞后时间显著增加,比如在地理复制过程中,网络延迟增多可能会导致次级副本落后。 在此方案中,流控制效率低下。
若要解决此网络滞后情况,UCS 需要延迟进入流控制。 这可以通过更改可用于将消息从主副本发送到次要副本的UCS boxcar数量限制来实现。 UCS 数据包在盒车中组合在一起,以允许通过网络更高效地传输。 当您增加 UCS 车厢的最大数量时,可以一次传输更多的数据包,从而延迟进入流量控制。
使用 Windows 注册表替代 UCS boxcars
从 SQL Server 2022(16.x)版本开始,您可以通过创建一个 SQL Server 在初始化时读取的注册表值来控制 UCS boxcar 的数量。
- 注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL16.<instance_name>\MSSQLServer\ServiceBroker - 值名称:
MaxPendingSend - 值类型:
REG_SZ
重要
你必须将值设置为 REG_SZ 而不是 REG_DWORD,因为 SQL Server 会检查类型,如果该值不是预期的类型,则会忽略它。
此机制有几个缺点:
数据库管理员可能无权访问注册表,无论是在 SQL Server 实例所在的同一台计算机上,还是远程访问。
数据库管理员和系统管理员通常是具有不同职责集的两个不同的角色,因此具有不同的权限集。
使用 sp_configure 替代 UCS 盒车
从 SQL Server 2025(17.x)开始,可以使用 max ucs send boxcars 服务器配置选项控制 UCS boxcar 的数量,并需考虑以下事项:
此设置是一个高级
sp_configure选项。最小值为
256(默认值),最大值为2048。 但是,可以使用值0将值重置为默认值。此配置选项优先于注册表设置。
此设置在 SQL Server 实例重启后生效。
USE master;
GO
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
EXEC sp_configure `max ucs send boxcars`, 1234;
RECONFIGURE;
GO
优先级顺序
下表显示了优先级示例,具体取决于所使用的替代机制。
| 规则 |
sp_configure 值 |
注册表值 | 有效值 |
|---|---|---|---|
max ucs send boxcars 非默认值(即不等于 256)的值优先于注册表值。 |
1024 | 2048 | 1024 |
如果 max ucs send boxcars 设置为其默认值 256,注册表值将生效。 |
256 | 2048 | 2048 |
如果 max ucs send boxcars 设置为 0,则使用默认值,该值优先于注册表值。 这样,如果数据库管理员没有编辑注册表的权限,他们仍然可以应用默认值。 |
0 | 2048 | 256 |
注解
设置RECONFIGURE服务器配置选项后,您必须运行max ucs send boxcars以应用新配置。 此设置仅在重启 SQL Server 实例后生效。
当 UCS boxcar 的数量使用非默认值时,SQL Server 会将信息消息记录到错误日志中。 信息消息包含有效值和替代来源: sp_configure 或 registry。
2024-10-08 13:38:26.11 Server UCS transport default sending capacity is overridden with the value of 1234. Override source: sp_configure. This is an informational message only. No user action is required.
消息的内部错误代码为 33338。 如果设置了默认值,则不会记录该消息。