4

我们有一个程序连接到我们的数据库并运行一些存储过程来获取一些数据。

数据库是 SQL Server 2008,程序在本地运行。连接是通过 TCP/IP,但启用了共享内存。并且连接字符串的超时设置为 45 秒。

当我们通过 SQL Server Management Studio 运行它们时,运行需要 0-5 秒。当我们通过代码运行它时,它会随机超时。

为了进行一些测试,我们将超时时间从 45 秒增加到几分钟。并且为了放弃任何阻塞问题,我们检查了存储过程仅“选择”数据(没有插入或更新语句)。我们已经为 select 语句尝试了几种表修饰符,例如:nolock, readpast, ...

我也检查了一下sp_who2dbcc opentran()没有任何东西被阻止......而且.Net的SPID是running command .... 有关 .Net 等待数据库答案的更多详细信息,通过 SQL Server Management Studio,我可以毫无问题地运行相同的语句(存储过程或选择)。

对正在发生的事情有什么建议吗?

4

3 回答 3

5

连接字符串超时仅影响登录超时。您似乎遇到了命令超时,只能通过修改CommandTimeout. 默认值为 30 秒,推荐值为 0(无限超时)。

至于为什么您的程序会随机执行缓慢,我建议您先阅读应用程序中的慢,SSMS 中的快?了解性能奥秘

顺便说一句,您的查询可能没有被阻止。它执行一个不同的计划,该计划只需要很长时间才能执行。签last_wait_typesys.dm_exec_requests可能会显示 IO 等待(PAGEIOLATCH,在sys.dm_os_workers加入后追逐任何红鲱鱼 CXPACKET...)。但是,重复我最初链接的 Erland Sommarskog 更全面、更出色的文章是没有意义的。

于 2012-11-09T15:37:38.983 回答
0

有 2 种超时:连接和查询。

如果你的查询超时,那就是查询问题;但既然你说你可以通过 SQL Server Management Studio 运行它,我怀疑它是查询。

如果您的连接超时,则很可能是网络问题。我看到您已经尝试过(锁、提示等),但您假设是导致问题的查询。试着从网络的角度来思考。我听说过 SQL Server 中的活动监视器,它可以帮助您在连接期间检测网络问题。

于 2012-11-09T15:48:23.727 回答
0

如果超时来自 .net 端,则将这 2 个参数添加到连接字符串。

超时=3600000;

最大池大小=360000;

于 2012-12-07T10:49:58.150 回答