我们有一个程序连接到我们的数据库并运行一些存储过程来获取一些数据。
数据库是 SQL Server 2008,程序在本地运行。连接是通过 TCP/IP,但启用了共享内存。并且连接字符串的超时设置为 45 秒。
当我们通过 SQL Server Management Studio 运行它们时,运行需要 0-5 秒。当我们通过代码运行它时,它会随机超时。
为了进行一些测试,我们将超时时间从 45 秒增加到几分钟。并且为了放弃任何阻塞问题,我们检查了存储过程仅“选择”数据(没有插入或更新语句)。我们已经为 select 语句尝试了几种表修饰符,例如:nolock
, readpast
, ...
我也检查了一下sp_who2
,dbcc opentran()
没有任何东西被阻止......而且.Net的SPID是running command ...
. 有关 .Net 等待数据库答案的更多详细信息,通过 SQL Server Management Studio,我可以毫无问题地运行相同的语句(存储过程或选择)。
对正在发生的事情有什么建议吗?