我的存储过程一直失败,并且特定用户的错误消息“Timeout expired”。
所有其他用户都能够很好地调用sp,甚至我可以使用查询分析器正常调用sp - 它只需10秒即可完成。但是对于有问题的用户,日志显示ASP总是挂起大约5分钟,然后超时中止。
我从ASP页面调用“EXEC SP_TV_GET_CLOSED_BANKS_BY_USERS '006111'
”
有人知道如何诊断问题吗?我已经尝试过查看数据库中的死锁,但没有找到任何死锁。
谢谢,
答案 0 :(得分:5)
一些想法......
阅读评论表明参数嗅探导致了这个问题。
如果此用户的行数远多于其他用户,或者在另一个表中有行(因此不同的表/索引搜索/扫描会更好),则可能会发生这种情况。
测试参数嗅探:
修复: 掩盖参数
DECLARE @MaskedParam varchar(10)
SELECT @MaskedParam = @SignaureParam
SELECT...WHERE column = @MaskedParam
只需google“参数嗅探”和“参数屏蔽”
答案 1 :(得分:0)
我想回答你的问题,我们可能需要更多的信息。
例如,您使用Active Directory对用户进行身份验证吗?您是否使用SQL分析器进行调查?听起来这可能是一个身份验证问题,其中SQL Server在验证此特定用户时遇到问题。
答案 2 :(得分:0)
听起来就像一个死锁问题..
还要确保此用户在SQL Server中具有执行权限和读取权限
但是,如果当时信息被写为试图被读取,那么你将死锁,因为交易尚未提交。
杰夫做了一篇关于他和stackoverflow的经历的精彩帖子。 http://www.codinghorror.com/blog/archives/001166.html
答案 3 :(得分:0)
要检查的事情:
现在,我可以推荐一款能够解决您问题的商业软件。它记录端到端事务,并分析特定故障。但我不想在这个论坛做广告。如果您愿意,请给我留言,我会解释更多。
答案 4 :(得分:0)
好吧,我建议您使用SQL Server Profiler并打开一个新会话。从ASP页面调用存储过程,看看发生了什么。虽然这可能无法解决您的问题,但它肯定会为您提供一个自己进行“调查”的起点。