链接服务器导致SQL Server停止响应

概要

如果多个实例中同时存在数据源为对方实例的链接服务器,并且开启了"分发服务器"的属性,您可能会遇到这种情况。

现象

14:31时,在SSMS中检查HIS实例是否有复制订阅时,点击了"发布服务器属性"后,SSMS一直无法响应。

14:33时,前端应用反馈有连不上数据库的情况,用SSMS测试也无法新建连接,但是原来已经建好的连接还能正常使用。14:38时,可以正常连接,前端应用也恢复正常。

分析

通过SQL专家云,看到HIS和CIS两个实例的活动会话等待数从14:31开始同时激增,HIS实例持续到14:39,CIS实例持续到14:44。

大量的活动会话在执行系统存储过程sys.sp_helpdistributor,等待类型都是OLEDB。

SQL Server官方文档对这个存储过程的功能描述是"列出有关分发服务器、分发数据库、工作目录和 Microsoft SQL Server 代理用户帐户的信息。该存储过程在发布服务器上对发布数据库或任何数据库执行。"。详细信息参考"https://learn.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008/ms177504(v=sql.100)"。

查看存储过程的定义,先获取数据源是分发服务器实例的链接服务器,如果该链接服务器的数据源不是当前实例,那么通过该链接服务器远程执行这个存储过程,获取分发服务器的信息。

在HIS实例上查询符合分发服务器条件的链接服务器是CISSVR,数据源是CIS实例。

在CIS实例上查询符合分发服务器条件的链接服务器是HISSVR,数据源是HIS实例。

根据上面查询到的信息和存储过程的定义可以得出结论:SSMS在HIS实例中点击"发布服务器属性",首先在HIS实例中执行sys.sp_helpdistributor,查询到链接服务器CISSVR为分发服务器,通过exec CISSVR.master.sys.sp_helpdistributor的方式在CIS实例中执行该存储过程,又查询到链接服务器HISSVR为分发服务器,继而通过exec HISSRV.master.sys.sp_helpdistributor的方式在HIS实例中执行该存储过程。如此形成了死循环式的嵌套调用,随着调用次数越来越多,连接数和内部线程消耗越来越多,导致新连接无法建立,直到生成Deadlocked Schedulers dump后。

测试

问题虽然定位清楚了,但是客户确认没有使用复制订阅的功能。因此判断和链接服务器属性有关。

在测试环境进行验证, 在没有开启复制订阅功能的实例,是不能看到"发布服务器属性"的菜单的。

修改任意链接服务器的"分发服务器"属性为True后,就能看到"发布服务器属性"的菜单。如果两个实例上各自有数据源为对方实例的链接服务器,就能模拟出相互循环调用的现象。

解决

对于没有使用复制订阅功能的实例,修改链接服务器的"分发服务器"属性为False,并且追溯为什么要开启这个属性。

对于使用了复制订阅功能的实例,不要配置两个实例互为对方的分发服务器,当然这种情况在实际环境中也不常见。

更多资料访问

北京格瑞趋势科技有限公司是聚焦于数据服务的高新技术企业,成立于2008年,创始团队及核心技术人员来自微软和雅虎。微软数据平台金牌合作伙伴。通过产品+服务双轮驱动的业务模式,15年间累计服务4000+客户,覆盖互联网、市政、交通、电信、医疗、教育、电力、制造业等各个领域。

相关推荐
roamingcode13 小时前
Cursor-memory-cli 自动化记忆提取的完整实现
运维·自动化·agent·memory·cursor·持久化记忆
YongCheng_Liang13 小时前
从零开始学虚拟化:高可用与灾备技术全解析(集群 + 备份 + 异地灾备)
运维·云计算
ℳ₯㎕ddzོꦿ࿐13 小时前
实战:构建基于 Docker-Compose 的HLS (m3u8) 实时转 FLV,基于 ZLMediaKit 的低延迟方案
运维·docker·容器
济61713 小时前
linux 系统移植(第二十八期)---- 运用MfgTool 工具烧写自制的烧写自制的系统系统---- Ubuntu20.04
linux·运维·服务器
太理摆烂哥13 小时前
Linux基础指令
linux·运维·服务器
xkxnq14 小时前
第四阶段:Vue 进阶与生态整合(第 58 天)(Vue 项目部署:打包、上线与服务器配置)
服务器·前端·vue.js
昨夜见军贴061614 小时前
合规性管理的现代化实践:IACheck的AI审核如何系统提升生产型检测报告的合规水平
大数据·运维·人工智能
Doro再努力14 小时前
【Linux04】 Linux基础指令完结与Linux权限初识(一)
linux·运维·服务器
江畔何人初14 小时前
k8s中namespace与容器cgroup区别
linux·运维·云原生
DARLING Zero two♡14 小时前
白板协作总卡壳?Tldraw+cpolar 解锁跨地域实时共创
服务器