如何判断问题存储过程的参数值是什么?

时间:2011-08-03 17:01:47

标签: sql sql-server blocking

我有一个存储过程导致我的SQL服务器数据库阻塞。每当它阻塞超过X秒时,我们会收到正在运行的查询的通知,它看起来类似于下面的内容。

   CREATE PROC [dbo].[sp_problemprocedure] (
    @orderid INT
    --procedure code

我如何判断@orderid的价值是什么?我想知道它的价值,因为这个程序每天会运行100次以上但只会导致阻塞几次,如果我们能找到订单ID之间的某种模式,也许我可以追踪到问题

如果有帮助,则从.NET应用程序调用该过程。

5 个答案:

答案 0 :(得分:2)

您是否尝试过程中打印?

http://msdn.microsoft.com/en-us/library/ms176047.aspx

答案 1 :(得分:1)

如果从.NET应用程序调用它,您可以轻松注销从.net应用程序传递的参数,但如果您没有访问权限,也可以使用SQL Server配置文件。可以在命令类型上设置过滤器,即只有proc和被击中的数据库,否则你将被配置文件可以产生的所有信息所淹没。

链接:Using Sql server profiler

答案 2 :(得分:1)

  • 重命名程序
  • 创建记录表
  • 创建一个新的(相同的签名/参数),调用原始文件,但首先记录参数并在调用结束时间戳后开始时间戳和日志
  • 使用原始名称
  • 创建此新proc的同义词

现在,您可以记录所有应用程序所做的所有调用...

您可以随时通过重新定义同义词以指向日志包装器或原始数据来取消/启用日志记录...

答案 3 :(得分:1)

最简单的方法是运行探查器跟踪。您将要捕获对存储过程的调用。

但实际上,这只是告诉你故事的一部分。我个人会从代码开始。尝试将批量较大的批量更新批量生产。如果没有必要,请尝试避免长时间运行的显式事务。查看您的触发器(如果有)和级联外键并确保它们有效。

答案 4 :(得分:1)

最简单的方法是执行以下操作:

  • 1)在.NET中,在运行程序之前获取日期时间
  • 2)在.Net中,程序完成后抓住日期时间
  • 3)在.NET中,做一些日期时间数学,如果它是“慢”,写入文件(日志)那些开始和结束日期 - 时间,用户信息,所有参数等。< / LI>