网络问题后的可用性组群集内存问题。如何转储 HADR 日志块消息池?

Jas*_*ire 2 sql-server memory clustering availability-groups sql-server-2016

我们有一个四节点可用性组,一个站点中有两个节点,另一个数据中心中有两个站点外节点。我注意到在每个 WAN 问题发生后,WAN 连接出现波动,并且异地节点不断断开连接并重新连接(使用 AOAG 仪表板中的 AOAG 运行状况),主服务器的内存被“HADR 日志块消息池”消耗

SELECT  *
FROM    sys.dm_os_memory_clerks
ORDER   BY pages_kb DESC
Run Code Online (Sandbox Code Playgroud)

类型:OBJECTSTORE_SERVICE_BROKER
名称:HADR 日志块消息池

在最坏的情况下,当网络震荡数小时时,这个内存管理员最终会消耗超过 90% 的 SQL Server 内存,导致 SQL Server 停止运行(SQL 有 10GB 的内存“HADR Log Block Msg Pool”正在使用 9.8GB)。

有没有办法转储这个 HADR 日志块消息池?还是一开始就阻止它变得如此之大?到目前为止,我们唯一的解决方案是故障转移并重新启动机器。

没有错误,只是节点的日志断开连接并重新连接,以及重新连接后数据库重新硬化的日志。

随着越来越多的内存被“HADR 日志块消息池”占用,可用于其他所有内容的内存会下降,从而影响性能。通常这 10GB 的 RAM 适合这个 AOAG 组和使用。只有当 WAN 波动一段时间时,我们才会出现此问题。

我们可以在服务器上投入更多内存,但我认为这不会解决根本问题,它只会在严重损害性能之前为我们争取更多时间。

我同意网络是根本原因,但在问题解决并且 AOAG 恢复同步后,SQL 不会像大多数 SQL 内存管理员那样恢复/重新分配 RAM 给其他 SQL 内存管理员,这似乎很奇怪。

日志传送不起作用;这是一个事务性环境,我们需要近乎实时的,最好是实时的异地 DR。AOAG 小组 99% 的时间都在工作,并且几乎总是实时同步。我们正在尝试与网络团队合作以改善连接性,和/或可能使它只是断开连接而不是摆动。

系统信息
SQL 版本:SQL 2016 SP1 CU6 13.0.4457.0
操作系统版本:Windows 2012 R2 6.3.9600
服务器内存:12GB
SQL 最大内存:10GB

可用性组配置信息
四个数据库在AOAG
AOAG数据库总共364GB
两个本地节点处于同步模式,每个
节点一票两个远程节点处于异步模式,零票
还有一个本地文件见证,一票.

Sea*_*ser 7

我注意到在每个 WAN 问题发生后,WAN 连接发生抖动,异地节点不断断开连接并重新连接,主服务器的内存被“HADR 日志块消息池”消耗掉

是的,这是目前的设计。预计两个站点之间的网络可以处理流量并且可用。由于情况似乎并非如此,因此 SQL Server 在这里确实不是问题,而是表现为问题。如果您要继续在不可靠且可能具有极高延迟的低带宽连接上工作,那么我不会使用可用性组。事实上,我不确定您想使用什么,因为没有任何东西会具有稳固可靠的连接,这似乎是问题的根本原因

有没有办法转储这个 HADR 日志块消息池?

在 SQL Server 内部?不。

还是一开始就阻止它变得如此之大?

是的,修复连接问题,它不会增长。如果是长期连接问题,则从 AG 中删除远程副本,它会停止增长。由于有两个远程副本,数据将被发送两次,这可能会加剧问题,因为在架构时可能没有考虑到可用的基础设施。

服务器内存:12GB

对于 364 GB 的数据库 + 操作系统 + 集群 + AG + 安装的所有防病毒软件和代理来说,这是非常少的服务器内存。