Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存储过程在特定用户上失败_Sql_Sql Server_Asp Classic_Timeout_Sql Server 2000 - Fatal编程技术网

Sql 存储过程在特定用户上失败

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”” 有人知道如何诊断这个问题吗?我已经尝试查看数据库中的死锁,但没有找到任何死锁 谢谢,我想要回答

我有一个存储过程在特定用户上不断失败,并显示错误消息“Timeout expired”

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

我从ASP页面中调用如下内容“
EXEC SP\u TV\u GET\u CLOSED\u BANKS\u BY\u USERS'006111”

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


谢谢,

我想要回答你的问题,我们可能需要更多的信息


例如,您是否使用Active directory对用户进行身份验证?您是否使用SQL探查器进行过调查?听起来可能是身份验证问题,SQL Server在验证此特定用户时遇到问题。

听起来像是死锁问题

还要确保此用户在SQL Server中具有执行权限和读取权限

但是,如果当时信息被写为它试图被读取,那么您将被死锁,因为事务尚未提交

杰夫写了一篇很好的帖子,介绍了他在这方面的经验和stackoverflow。

需要检查的几件事:

  • 这种情况是否只发生在特定用户的机器上?他能从别人那里试试吗 机器?-这可能是客户端配置问题
  • 您能否捕获此特定用户运行的实际字符串并从ASP页面运行它?用户执行SP的方式可能会生成循环或大量数据
  • 最后,如果您使用的是组织内应用程序,则可能是您的特定用户的权限不同于其他用户。您可以在Active Directory级别比较它们

  • 现在,我可以推荐一款商业软件,它肯定会解决您的问题。它记录端到端事务,并分析特定故障。但我不想在这个论坛上做广告。如果您愿意,请给我写个便条,我会详细解释。

    好的,我建议您使用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”时崩溃了两次。这听起来确实像是问题的原因。感谢您纠正了错误。时间还早:-)我们好不容易才发现这一点。