在我的生产环境中,很少发生未处置的事务,这些事务会锁定一个表。我想在我的应用程序代码中修复它。
我可以临时获取 TransactionId 和 SessionId,但是 如何获取事务中执行的 SQL 命令,以便可以将其追溯到应用程序代码?
这是我获取长期未处置交易 ID 的方法:
SELECT trans.session_id AS [SESSION ID]
,login_name AS [Login NAME]
,trans.transaction_id AS [TRANSACTION ID]
,tas.name AS [TRANSACTION NAME]
,tas.transaction_begin_time AS [TRANSACTION BEGIN TIME]
FROM sys.dm_tran_active_transactions tas
JOIN sys.dm_tran_session_transactions trans ON (trans.transaction_id = tas.transaction_id)
由于您从与我们分享的查询中获取交易 ID,以下查询可能有助于您使用 DMV 获取与交易相关的查询的 SQL 文本:
或者,您可以使用扩展事件来捕获 XEL 文件上的所有查询,然后提取与特定交易 ID 相关的查询。