SQL Server 长时间运行的查询通过 .Net 随机超时

Ale*_*lex 4 .net c# sql-server timeout sqlclient

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

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

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

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

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

关于发生了什么的任何建议?

Rem*_*anu 5

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

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

顺便说一句,您的查询可能没有被阻止。它执行一个不同的计划,而这个计划只需要很长时间来执行。检查last_wait_typesys.dm_exec_requests可能会显示IO等待(PAGEIOLATCH,后沙塞任何红鲱鱼CXPACKET下来sys.dm_os_workers加入...)。但是没有必要重复我最初链接的 Erland Sommarskog 所写的更为全面和出色的文章。

  • “...推荐值为 0(无限超时)。” - 由谁推荐,为什么? (6认同)
  • 如果普遍推荐使用 0,我相信这就是默认值。 (4认同)