如何在SQL Server Profiler中获取SQL Server查询的参数值

时间:2009-12-23 13:31:52

标签: sql-server sql-server-2008 sql-server-profiler

我正在尝试分析SQL Server 2008探查器中的死锁。我知道如何找到有问题的SQL查询,但收集的查询不包含参数值。

换句话说,我可以看到这样的事情:

DELETE FROM users WHERE id = @id

但我希望看到的是:

DELETE FROM users WHERE id = 12345

我想我需要在探查器中收集一些额外的事件或列,但我不知道哪个。我目前正在使用“TSQL_LOCKS”模板。

任何提示都将不胜感激。

谢谢,

阿德里安

免责声明:之前我曾问过类似的问题,但我觉得这个问题太具体了,这就是我没有回复的原因。我正在尝试用这个尝试。

4 个答案:

答案 0 :(得分:19)

我认为您需要RPC:已完成的事件:

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

答案 1 :(得分:4)

Profiler将包含RPC:Completed / RPC:Starting个事件中的参数值。但是你已经收到回复告诉你了。

我想要添加的是,为了分析死锁图,很少需要知道参数运行时值。首先,因为如果“用户”涉及死锁,如果冲突在密钥上,则死锁图本身将泄露@id是冲突。其次,更重要的是,对于死锁场景而言,与所涉及的确切密钥无关。不会发生死锁,因为删除了id为123的用户,但删除用户321时不会发生。

如果您决定首先询问SO,我认为最好发布实际的死锁图并让社区查看它。这里有很多可以从死锁图XML中回答很多问题。

答案 2 :(得分:1)

使用检查了所有复选框的以下事件开始跟踪:

SQL: BatchCompleted
SQL: BatchStarting
Deadlock graph
Lock:Deadlock
Lock:Deadlock chain

发生死锁后,停止跟踪,然后单击死锁图事件类。

这可以让你很好地了解出了什么问题。

答案 3 :(得分:1)

如果您正在使用存储过程(看起来像你)或Hibernate / NHibernate,您可能需要打开存储过程启动事件(SP:StmtStarting)和RPC:Starting事件。这将在查询后显示其自身行中的参数。

类似的东西:

SP:StmtStarting DELETE FROM users WHERE id = @id

RPC:启动exec sp_execute 12345