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

22

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

换句话说,我能看到类似这样的内容:

DELETE FROM users WHERE id = @id

但我想要看到的是:

DELETE FROM users WHERE id = 12345

我猜我需要在分析器中收集一些额外的事件或列,但我不知道具体是哪些。我目前正在使用"TSQL_LOCKS"模板。

如果有任何提示,将不胜感激。

谢谢,

Adrian

免责声明:我之前问过一个类似的问题,但我认为它太具体了,所以没有得到回复。我通过这个问题再次尝试。

4个回答

24

7
Profiler会在RPC:Starting/RPC:Completed事件中包含参数值。但你已经得到了告诉你这一点的回复。
我想补充的是,为了分析死锁图,很少需要知道参数运行时的值。首先,如果“用户”参与死锁,死锁图本身将透露冲突的@id是什么,如果冲突发生在关键字上。其次,更重要的是,在死锁场景下,涉及到的确切关键字是无关紧要的。不像死锁发生是因为删除id为123的用户,但不会因为删除id为321的用户而发生。
如果你一开始就决定在SO上提问,我认为最好的方法是发布实际的死锁图并让社区来看看它。这里有很多人可以从死锁图XML中回答相当多的问题。

顺便提一下,如果您决定发布整个图形而不仅仅是一半(?),请确保发布死锁事件的实际死锁图,而不是其图片。即死锁事件的XML,而不是呈现图像的屏幕截图。在渲染过程中会丢失大量信息。 - Remus Rusanu
谢谢您的回复,但我认为有误解。我在另一篇帖子中链接的图片不是来自我的电脑。我是从一个关于如何使用SQL服务器分析器的教程中得到它的。它显示了图形工具提示中的参数值,而我的图形工具提示只包括查询,没有参数值。这就是我发布问题的原因。 - Adrian Grigore
@Adrian:分析时一定要查看XML的内容。在SSMS中的图形渲染仅仅用于快速浏览。保存事件(右键单击事件),然后将其作为普通XML文件打开。 - Remus Rusanu

1

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

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

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

这应该能让您很好地了解出了什么问题。


谢谢,但我已经知道了。问题在于死锁图不包含参数值,只有查询,如此处所述:https://dev59.com/wXI-5IYBdhLWcg3wPFx2 - Adrian Grigore

1
如果你正在使用存储过程(看起来是这样),或者 Hibernate/NHibernate,可能需要打开存储过程开始事件(SP:StmtStarting)和 RPC 开始事件(RPC:Starting)。这将在查询后的单独一行显示参数。
类似于以下内容:
SP:StmtStarting DELETE FROM users WHERE id = @id
RPC:Starting exec sp_execute 12345

谢谢提示!在这种情况下我没有使用SP,但是知道这个信息还是很好的。 - Adrian Grigore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接