2009-12-23 50 views
14

我试图分析SQL Server 2008概要分析器中的死锁。我知道如何找到有问题的sql查询,但收集到的查询不包含参数值。如何在SQL Server Profiler中获取SQL Server查询的参数值

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

DELETE FROM users WHERE id = @id 

但我想看到的是这样的:

DELETE FROM users WHERE id = 12345 

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

任何提示将不胜感激。

感谢,

阿德里安

免责声明:我以前就问过类似的问题,但我想这是太具体,这就是为什么我没有得到回复。我正在开始另一次尝试。

回答

1

具有所有的复选框选中下列事件开始追踪,然后单击死锁图形事件类。

这应该给你一个关于发生了什么问题的好主意。

+0

谢谢,但我已经知道了。问题是死锁图不包含参数值,只是在这里解释的查询:http://stackoverflow.com/questions/1952830/how-do-i-get-parameter-values-for-sql-server- query-in-sql-server-profiler – 2009-12-23 17:45:45

1

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

喜欢的东西:

SP:StmtStarting DELETE FROM用户WHERE ID = @id

RPC:启动EXEC sp_execute 12345

+0

谢谢你的提示!在这种情况下,我没有使用SP,但仍然很高兴知道。 – 2009-12-23 17:40:43

3

事件探查器将包含RPC:Completed/RPC:Starting事件的参数值。但你已经收到回复,告诉你这一点。

我想补充说的是,为了分析死锁图,很少需要知道参数运行时值。首先,因为如果'用户'参与了死锁,那么如果冲突在关键字上,则死锁图本身将泄露@id是冲突。其次,更重要的是,对于死锁情况与所涉及的确切键无关。不会像发生死锁一样,因为用户删除id为123的用户,但在删除用户321时不会发生。

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

+0

顺便说一句,如果你决定发布整个图表,不只是一半(?),请张贴实际的死锁图表,而不是它的图片。即。死锁事件的XML,而不是渲染图像的屏幕截图。渲染过程中会有很多信息丢失。 – 2009-12-23 16:33:16

+0

感谢您的回复,但我认为存在误解。我在其他帖子中链接的图片不是来自我的电脑。我从一篇关于如何使用SQL服务器分析器的教程中获得了它。它在图形工具提示中显示参数值,而我自己的图形工具提示仅包含查询,但没有参数值。这就是为什么我发布我的问题。 – 2009-12-23 17:39:32

+0

@Adrian:总是在XML内部进行分析。 SSMS中的图形渲染只是为了快速浏览一下。保存事件(右键单击它),然后以普通XML的形式打开保存的文件。 – 2009-12-23 18:33:22