我有一个存储过程导致我的SQL服务器数据库阻塞。每当它阻塞超过X秒时,我们会收到正在运行的查询的通知,它看起来类似于下面的内容。
CREATE PROC [dbo].[sp_problemprocedure] (
@orderid INT
--procedure code
我如何判断@orderid的价值是什么?我想知道它的价值,因为这个程序每天会运行100次以上但只会导致阻塞几次,如果我们能找到订单ID之间的某种模式,也许我可以追踪到问题
如果有帮助,则从.NET应用程序调用该过程。
答案 0 :(得分:2)
答案 1 :(得分:1)
如果从.NET应用程序调用它,您可以轻松注销从.net应用程序传递的参数,但如果您没有访问权限,也可以使用SQL Server配置文件。可以在命令类型上设置过滤器,即只有proc和被击中的数据库,否则你将被配置文件可以产生的所有信息所淹没。
答案 2 :(得分:1)
现在,您可以记录所有应用程序所做的所有调用...
您可以随时通过重新定义同义词以指向日志包装器或原始数据来取消/启用日志记录...
答案 3 :(得分:1)
最简单的方法是运行探查器跟踪。您将要捕获对存储过程的调用。
但实际上,这只是告诉你故事的一部分。我个人会从代码开始。尝试将批量较大的批量更新批量生产。如果没有必要,请尝试避免长时间运行的显式事务。查看您的触发器(如果有)和级联外键并确保它们有效。
答案 4 :(得分:1)
最简单的方法是执行以下操作: