全局更改 CommandTimeout 默认值

Change CommandTimeout Default Value globally

我们将一些旧软件迁移到了新服务器。我们以前用的是SQL Server 2008 Enterprise,现在在新机器上用的是SQL Server 2014 Enterprise,所以现在应该更快了。

旧软件是遗留软件,即将过期,所以我不想花太多精力去修复它。但由于某种原因,有一个 C# 函数 运行 对我收到错误消息的数据库执行 SQL 查询

Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

我只读到,我必须使用 CommandTimeout 来延长超时时间。但不幸的是,所有 运行 都在 "context connection = true" 之下。因此,重建此功能并有机会更改超时需要相当多的工作。

我问自己,为什么这个 运行 在旧机器上,而在新机器上却不行。所以它必须对新机器或新 SQL 服务器引擎做一些事情。有什么方法可以更改 .NET Framework 或 SQL 服务器中命令的标准超时 30 秒?

非常感谢任何建议!

您可以使用 CommandTimeout 属性:

设置命令的超时
var cmd = new SqlCommand { CommandTimeout = 60 }

好的,我还没有找到问题的解决方案,但是超时并不是真正的问题根源。我获得了对旧系统的访问权限并 运行 进行了一些测试,结果证明在旧机器上使用旧服务器软件 运行 的相同功能要快得多,因此没有超时。

因此,我必须专注于服务器速度和数据库调优。

感谢所有认真回答这个问题的人!

编辑:

我找到了解决问题的间接方法。我找不到为什么在新机器上执行语句需要这么长时间。但事实证明,语句本身使用了 table 变量。我将它们更改为数据库 tempdb 中的本地临时 table。现在执行时间不到 1 秒,而不是超过 7 分钟!

对我来说,这似乎是某些缓存或未配置 SQL 服务器的问题。不幸的是,我不是真正的服务器管理员,我不会胡乱摆弄它。但我会向管理员提及。至少,程序 运行 现在很完美。