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


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

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

DELETE FROM users WHERE id = @id

但我希望看到的是:

DELETE FROM users WHERE id = 12345

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

任何提示将不胜感激。

谢谢,

阿德里安

免责声明:我之前曾问过类似的问题,但我觉得它太具体了,这就是为什么我没有回复。我开始用这个尝试了。


17
2017-12-23 13:31


起源




答案:


我认为你需要RPC:Completed事件:

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


18
2017-12-23 13:44





Profiler将包含参数值 RPC:已完成/RPC:启动 事件。但是你已经得到了回复告诉你这个。

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

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


4
2017-12-23 16:25



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


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

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

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

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


1
2017-12-23 14:16



谢谢,但我已经知道了。问题是,在死锁图形中不包含的参数值,只是查询,如下解释: stackoverflow.com/questions/1952830/... - Adrian Grigore


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

就像是:

SP:StmtStarting DELETE FROM users WHERE id = @id

RPC:启动exec sp_execute 12345


1
2017-12-23 15:21



谢谢你的提示!我没有使用在这种情况下,SP,但它仍然是很好的了解。 - Adrian Grigore