Sql 存储过程在特定用户上失败
我有一个存储过程在特定用户上不断失败,并显示错误消息“Timeout expired” 所有其他用户都可以很好地调用sp,甚至我也可以使用查询分析器正常地调用sp——只需10秒钟即可完成。然而,对于有问题的用户,日志显示ASP总是挂起大约5分钟,然后超时中止 我从ASP页面中调用如下内容“Sql 存储过程在特定用户上失败,sql,sql-server,asp-classic,timeout,sql-server-2000,Sql,Sql Server,Asp Classic,Timeout,Sql Server 2000,我有一个存储过程在特定用户上不断失败,并显示错误消息“Timeout expired” 所有其他用户都可以很好地调用sp,甚至我也可以使用查询分析器正常地调用sp——只需10秒钟即可完成。然而,对于有问题的用户,日志显示ASP总是挂起大约5分钟,然后超时中止 我从ASP页面中调用如下内容“EXEC SP\u TV\u GET\u CLOSED\u BANKS\u BY\u USERS'006111”” 有人知道如何诊断这个问题吗?我已经尝试查看数据库中的死锁,但没有找到任何死锁 谢谢,我想要回答
EXEC SP\u TV\u GET\u CLOSED\u BANKS\u BY\u USERS'006111”
”
有人知道如何诊断这个问题吗?我已经尝试查看数据库中的死锁,但没有找到任何死锁
谢谢,我想要回答你的问题,我们可能需要更多的信息
例如,您是否使用Active directory对用户进行身份验证?您是否使用SQL探查器进行过调查?听起来可能是身份验证问题,SQL Server在验证此特定用户时遇到问题。听起来像是死锁问题 还要确保此用户在SQL Server中具有执行权限和读取权限 但是,如果当时信息被写为它试图被读取,那么您将被死锁,因为事务尚未提交 杰夫写了一篇很好的帖子,介绍了他在这方面的经验和stackoverflow。
需要检查的几件事:
现在,我可以推荐一款商业软件,它肯定会解决您的问题。它记录端到端事务,并分析特定故障。但我不想在这个论坛上做广告。如果您愿意,请给我写个便条,我会详细解释。好的,我建议您使用SQL Server Profiler并打开一个新会话。从ASP页面调用存储过程并查看发生了什么。虽然这可能无法解决您的问题,但它肯定可以为您自己进行一些“调查”提供一个起点。一些想法 阅读评论表明,参数嗅探是问题的根源
- 对于其他用户,缓存的计划对于他们发送的参数来说已经足够好了
- 对于该用户,缓存的计划可能是错误的
- 在调用或def中使用重新编译(临时)。对于复杂的查询,这可能会很慢
- 在超时后重新生成索引(或只是统计信息),然后重试。这将使所有缓存的计划无效
DECLARE @MaskedParam varchar(10)
SELECT @MaskedParam = @SignaureParam
SELECT...WHERE column = @MaskedParam
只需谷歌“参数嗅探”和“参数屏蔽”你所说的“特定用户”是什么意思?运行SP的用户,或您在查询中的006111?'006111'是失败的用户id,但如果我在查询分析器中调用此id,SP将在大约10秒钟内完成。我要问的是,用户名是否为“Robert”);DROP TABLE EMPLOYEES;-?“执行上下文是否有问题?”?也就是说,您是否可以从ASP页面(不是查询分析器)运行这个存储过程,并且只运行这个存储过程,然后让它工作,或者它是否仍然超时?正如我所说,调用该页面的其他用户可以很好地调用SP。我能找到的另一个异常是,sp被加载到一个记录集中,并且该记录集在对该特定用户执行“rsUBanks.MoveFirst”时崩溃了两次。这听起来确实像是问题的原因。感谢您纠正了错误。时间还早:-)我们好不容易才发现这一点。