具有500个数据库的SQL Server 2017-自CU9起频繁的AG断开连接
大家好,在此先感谢您的帮助。SQL Server 2017可用性组面临挑战。 背景 公司是零售B2B后端软件。大约500个单租户数据库,以及所有租户使用的5个共享数据库。工作负载特征读取最多,大多数数据库的活动很少。 托管在同一地点的物理生产服务器最近从Windows Server 2012上的SQL Server 2014 Enterprise在共享SAN / FCI配置中升级到Windows Server 2016上的SQL Server 2017 Enterprise(2插槽/ 32核/ 768 GB RAM和本地)使用AlwaysOn AG的SSD驱动器。AG业务使用带交叉电缆连接的专用10G NIC端口。 他们的要求是所有数据库都一起进行故障转移,因此他们不得不将它们全部放在一个AG中。它是同一服务器上的单个不可读取的同步副本。 新服务器已于2018年6月投入生产。安装了最新的CU(当时为CU7)和Windows更新,并且系统运行良好。大约一个月后,在将服务器从CU7更新到CU9之后,他们开始注意到以下挑战,按优先顺序列出。 我们一直在使用SQL Sentry监视服务器,没有发现物理瓶颈。所有关键指标似乎都不错。CPU平均为20%,IO时间通常小于1ms,RAM未被充分利用,并且网络<1%。 挑战性 故障转移后,症状似乎会好转,但几天后又回来了,不管哪个服务器是主要服务器-两个服务器上的症状都相同。 零星的客户端超时和连接故障,例如 建立连接时发生错误 要么 执行超时已过期 有时这些会持续40秒钟,然后消失。 事务日志备份作业完成的时间比以前长10倍。以前备份所有500个数据库的日志需要2到3分钟,现在备份需要15到25分钟。我们已经验证了备份本身可以很好地运行并具有良好的吞吐量。但是,在完成一个日志的备份之后和启动下一个日志之前会有一个小的延迟。它开始时非常低,但是在一两天内会达到2-3秒。乘以500个数据库,便有区别。 有时,一些看似随机的数据库在手动故障转移后会陷入“未同步”状态。解决此问题的唯一方法是在辅助副本上重新启动SQL Server服务,或者将这些数据库删除并重新加入AG。 CU10引入的另一个问题(在CU11中未解决):在master.sys.databases上阻塞时,辅助超时的连接,甚至无法将SSMS对象资源管理器用于辅助副本。根本原因似乎是由Microsoft SQL Server VSS编写器发出以下查询阻止的: select name, recovery_model_desc, state_desc, CONVERT(integer, is_in_standby), ISNULL(source_database_id,0) from …