swa*_*eck 7 sql-server sql-server-2008-r2 dmv
当我执行下面的两个查询时,
SELECT
session_id, transaction_id
FROM sys.dm_tran_session_transactions;
Run Code Online (Sandbox Code Playgroud)
和
SELECT
session_id, request_id, at.transaction_id
FROM sys.dm_tran_active_transactions at
JOIN sys.dm_exec_requests r
ON r.transaction_id = at.transaction_id;
Run Code Online (Sandbox Code Playgroud)
我已经阅读了1和2的 BOL,但没有看到任何关于为什么会出现差异的明确解释。
我得到不同的结果。前一个查询不返回任何结果,但后者返回带有会话和事务 ID 的活动事务。该request_id是0,我认为它,意味着它在会议上提出的唯一请求。有人可以帮助我理解为什么我上面查询的两个概念之间存在差异吗?
编辑
我只是重新运行了查询,现在我得到了第一个 DMV 的结果,该结果session_id实际上并未包含在第二个结果集中。
似乎sys.dm_tran_session_transactions不包括自动提交事务:
-- No result
SELECT
session_id,
transaction_id
FROM sys.dm_tran_session_transactions;
Run Code Online (Sandbox Code Playgroud)
使用显式事务确实会返回结果:
BEGIN TRANSACTION;
-- Row returned
SELECT
session_id,
transaction_id
FROM sys.dm_tran_session_transactions;
ROLLBACK TRANSACTION;
Run Code Online (Sandbox Code Playgroud)
DMV 是对内部结构的看法,文档通常不像其他领域那样全面。其中一些可能是因为每次 DMV 行为发生变化时都要经历一个完整的弃用周期会很不方便,但在这种情况下这可能只是一个疏忽。您可以在 Connect 上报告文档不足。
Adam Machanic 在编写他的sp_WhoIsActive工具时发现了 DMV 的各种奇怪的小行为。如果它适合您的目的,您可以使用它而不是尝试编写自己的监控查询。
| 归档时间: |
|
| 查看次数: |
1179 次 |
| 最近记录: |