在SQL Server 2008 R2上执行存储过程的瞬态问题

时间:2015-04-24 14:59:30

标签: sql-server-2008-r2 ado.net

我们遇到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" 

到目前为止尝试过:

  • 为操作系统添加了额外的2GB RAM:无需更改
  • 添加了额外的tempdb文件,tempdb日志文件的扩展大小从1到5gb:将问题从每周减少到每隔2周或第3周。
  • 已安装的SQL Server 2008 R2 SP3:无变化。

黑云:

对我来说,重复的故障时间模式意味着数据库主机(服务器或资源)出现问题,但DBA看不到负载或资源问题。如果它纯粹是一个主机问题,为什么它会响应SQL Server Management调用,而不是ADO.NET调用?

最后一次发生持续了两个多小时,并在重新启动数据库服务器后得到解决。不是一个伟大的后备,而是绝望的时代和所有...... ..

1 个答案:

答案 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连接那样运行,并让我们认识到这是一个"参数嗅探"问题。我们已应用更改来禁用存储过程中的参数嗅探。