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

文章讲述了当两个SQLServer实例中存在互相作为分发服务器的链接服务器时,可能导致SSMS操作卡死的问题。sys.sp_helpdistributor存储过程在无复制订阅的情况下形成死循环,解决方法包括修改链接服务器属性并理解其用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概要

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

现象

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+客户,覆盖互联网、市政、交通、电信、医疗、教育、电力、制造业等各个领域。

### 解决SQL Server 安装过程中无响应的问题 当遇到SQL Server安装过程无响应的情况时,可以采取一系列措施来排查并解决问题。 #### 检查操作系统兼容性 确保所使用的操作系统版本与SQL Server完全兼容至关重要。不同版本的操作系统可能会影响SQL Server的正常安装和运行[^1]。建议查阅官方文档以确认当前系统的支持状态,并考虑升级到受支持的操作系统版本。 #### 配置网络设置 有时,在尝试启动SQL Server实例时会遭遇失败或者延迟响应的现象。这可能是由于某些特定的服务或组件配置不当引起的。对于SQL Server 2005而言,应当检查`SQLServer2005配置管理器`下的`MSSQLSERVER协议`部分,特别是其中的VIA选项是否被激活。如果有,则应将其禁用后再重试安装流程[^2]。 ```powershell # 使用PowerShell命令行工具进入SQL Server配置管理器路径下执行相应操作 Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\MSSQLServer\Client\SNI11.0" -Name VIAEnabled -Value 0 ``` #### 更新.NET框架 另一个潜在的原因在于缺少必要的软件依赖项——比如过期的`.NET Framework`版本可能导致应用程序无法顺利加载所需资源而卡住。因此,获取最新版的Microsoft .NET Framework补丁包有助于改善这种情况[^4]。 #### 查询现有服务器配置 为了进一步诊断问题所在,还可以利用API接口查询目标机器上的SQL Server配置详情,包括但不限于自动恢复机制等特性。具体做法可参照RESTful API指南中关于如何检索指定云主机的相关信息[^5]: ```http GET https://example.com/v1/{project_id}/cloudservers/{server_id}/autorecovery HTTP/1.1 Host: example.com Authorization: Bearer {access_token} Content-Type: application/json ``` 以上方法可以帮助定位并修复SQL Server服务器端安装期间发生的无响应状况。当然,实际处理过程中还需结合具体情况灵活调整策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值