【问题标题】:TimeoutException in SQL Server 2005 migrated from SQL Server 2000从 SQL Server 2000 迁移的 SQL Server 2005 中的 TimeoutException
【发布时间】:2011-11-19 01:52:58
【问题描述】:

我最近将 MSSQL 服务器从 2000 版本更新到 2005,以利用 UDF 并在系统中调整一些结果。问题是我们没有源代码。

所以,我更换了 SQL 版本,并且一切正常……除非我们必须进行大型查询。我收到此错误:

System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

我已经搜索过它,我得到的是它曾经是一个 CommandTimeout 问题,我必须以编程方式解决,因为它应该在客户端,但这很奇怪,因为它即使处理大查询也总是有效。

我的猜测是这不是客户端,因为在 SQL Server 2000 中运行良好。

有没有办法消除任何类型的超时?该系统完全是内部的,只有少数人使用它,所以没有中断的风险......我更喜欢永远运行的查询而不是这些烦人的消息。

提前致谢!

【问题讨论】:

  • 因此,除了更改数据库版本之外,您还使用了 UDF 并“调整”了服务器端代码。您是否尝试回滚您的修复以尝试隔离它是版本问题还是您的“调整”?
  • 超时由客户端而不是 SQL Server 设置,因此您无法从 SQL Server 端更改它。
  • @Martin 好的,明白了,但是如果它在客户端,为什么它在 2000 年有效?谢谢!
  • @Gonzalo- 您的某些查询现在需要更长的时间。
  • @Martin 不,他们没有。我已经检查过了。我们以前从未收到过超时错误,即使查询时间较长。

标签: sql-server sql-server-2005 timeout database-migration


【解决方案1】:

升级后您是否更新了所有统计信息?

How to: Upgrade to SQL Server 2005 (Setup)

将数据库引擎升级到 SQL Server 2005 后,完成 以下任务:

...

更新统计信息 - 为了帮助优化查询性能,我们建议 升级后更新所有数据库的统计信息。使用 sp_updatestats 存储过程更新用户定义的统计信息 SQL Server 2005 数据库中的表。

更新使用计数器 - 在 SQL Server 的早期版本中,值 对于表和索引的行数和页数可以变成 不正确。要更正任何无效的行数或页数,我们建议 升级后在所有数据库上运行 DBCC UPDATEUSAGE。

【讨论】:

  • 是的,我做到了。无论如何,问题不在于查询需要多长时间。我需要能够像在 SQL Server 2000 中那样运行长查询。
  • @Gonzalo - 我只是想问一下,因为糟糕的统计数据肯定会导致您在升级后遇到突然超时。
【解决方案2】:

您可以在配置文件中或在设置连接时设置连接超时。

SqlCommand1.CommandTimeout = 400000

【讨论】:

  • 问题是我们没有源代码。 :-/ 但是,客户端没有任何设置,因为当它连接到 sql server 2000 时,它确实有效。没有办法在服务器中设置默认值?
  • @Gonzalo - 如果您无法控制客户端的 CommandTimeout 值,那么我建议分析应用程序正在进行的 sql 调用并查询调整它们以缓解问题。
  • 我不记得 SQL 2005 的开头了,但在 2008 年,您可以在 Management Studio 中右键单击服务器,转到“属性”,然后转到“连接”并设置远程查询超时。跨度>
  • 最后我反编译了DLL并在SQLCommand创建后添加了这个:ldloc.0 ldc.i4.s 0 callvirt instance void [System.Data]System.Data.IDbCommand::set_CommandTimeout(int32)跨度>
猜你喜欢
  • 1970-01-01
  • 2011-07-02
  • 2010-12-18
  • 2010-12-17
  • 2011-09-20
  • 1970-01-01
  • 2013-02-08
  • 2013-08-19
  • 1970-01-01
相关资源
最近更新 更多