我们遇到SQL Server 2008 R2 64响应存储过程调用的问题。大约每两周左右,数据库停止响应从ADO连接/命令集(4.0框架)调用的存储过程。我们几个月来一直在研究这个问题,但收效甚微。
系统更改:
我们通过升级方法将现有供应商产品从SQL Server 2005升级到SQL Server 2008 R2。数据库实例从32位Windows 2003 Server迁移到64位Windows 2008 Server。
失败的模式:
应用程序全天运行,由不同用户通过Citrix执行而不会出现问题。每隔几周,应用程序就会在同一时间段内停止响应。一旦数据库停止响应应用程序的托管实例,应用程序的任何执行程序都会挂起(安装在CITRIX服务器上,安装在各种物理系统上,或在VStudio 2010中调试)。检查日志,服务器状态,SQL监视工具一小时,跟踪重复执行尝试后,服务器决定在没有干预的情况下响应应用程序。
奇怪的是,当服务器没有响应ADO.Net调用时,我们从SQL Server Management Studio执行存储过程并在1到2秒内收到结果。我们使用相同的登录名访问SQL Server Management Studio,并使用相同的参数执行存储过程。
查看传递给ADO连接的连接字符串,我没有看到任何异常:
connectionString="Data Source=myserver\myinstance;Initial Catalog=databaseName;Persist Security Info=True;User ID=xxxxx;Password=yyyyy;Connect Timeout=45"
到目前为止尝试过:
黑云:
对我来说,重复的故障时间模式意味着数据库主机(服务器或资源)出现问题,但DBA看不到负载或资源问题。如果它纯粹是一个主机问题,为什么它会响应SQL Server Management调用,而不是ADO.NET调用?
最后一次发生持续了两个多小时,并在重新启动数据库服务器后得到解决。不是一个伟大的后备,而是绝望的时代和所有...... ..
答案 0 :(得分:0)
更新ADO.NET连接以使用命名管道解决了我们的应用程序的问题。用" np:"前缀数据库名称;使用命名管道进行连接。
connectionString="Data Source=np:myserver\myinstance;Initial Catalog=databaseName;Persist Security Info=True;User ID=xxxxx;Password=yyyyy;Connect Timeout=45"
问题于5/14返回。这个query timeout posting给了我们一些提示,告诉我们如何强制SQL Management Studio像ADO.NET连接那样运行,并让我们认识到这是一个"参数嗅探"问题。我们已应用更改来禁用存储过程中的参数嗅探。