当前位置:  开发笔记 > 数据库 > 正文

存储过程对特定用户失败

如何解决《存储过程对特定用户失败》经验,为你挑选了1个好方法。

我有一个存储过程经常失败,并在特定用户上显示错误消息"Timeout expired".

所有其他用户都能够很好地调用sp,甚至我可以使用查询分析器正常调用sp - 它只需10秒即可完成.但是对于有问题的用户,日志显示ASP总是挂起约5分钟,然后以超时中止.

我从ASP页面调用如此" EXEC SP_TV_GET_CLOSED_BANKS_BY_USERS '006111'"

有谁知道如何诊断问题?我已经尝试过查看数据库中的死锁,但没有找到任何死锁.

谢谢,



1> gbn..:

一些想法......

阅读评论表明,参数嗅探导致了这个问题.

对于其他用户,缓存计划对于他们发送的参数足够好

对于此用户,缓存的计划可能是错误的

如果此用户具有比其他用户多得多的行,或者在另一个表中有行(因此不同的表/索引搜索/扫描会更好),则可能发生这种情况

要测试参数嗅探:

在呼叫或def中使用RECOMPILE(临时).对于复杂查询,这可能会很慢

超时后重建索引(或只是统计信息),然后重试.这会使所有缓存的计划无效

修复:屏蔽参数

DECLARE @MaskedParam varchar(10)
SELECT @MaskedParam = @SignaureParam

SELECT...WHERE column = @MaskedParam

只是google"参数嗅探"和"参数屏蔽"

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有