AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 50837
Accepted
swasheck
swasheck
Asked: 2013-10-02 11:39:39 +0800 CST2013-10-02 11:39:39 +0800 CST 2013-10-02 11:39:39 +0800 CST

为什么 SQL Server 2008 R2 中的这些事务 DMV 之间存在差异?

  • 772

当我执行下面的两个查询时,

SELECT 
    session_id, transaction_id
    FROM sys.dm_tran_session_transactions;

和

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;

我已经阅读了1和2的 BOL,但没有看到任何关于为什么会出现差异的明确解释。

我得到不同的结果。前者查询不返回任何结果,但后者返回具有会话和事务 ID 的活动事务。是 0,我认为这request_id意味着它是会话发出的唯一请求。有人可以帮助我理解为什么我上面查询的两个概念之间存在差异吗?

编辑

我只是重新运行查询,现在我得到了第一个 DMV 的结果,它session_id实际上不包含在第二个结果集中。

sql-server sql-server-2008-r2
  • 3 3 个回答
  • 1233 Views

3 个回答

  • Voted
  1. Best Answer
    Paul White
    2013-10-02T21:25:36+08:002013-10-02T21:25:36+08:00

    似乎sys.dm_tran_session_transactions不包括自动提交事务:

    -- No result
    SELECT 
        session_id, 
        transaction_id
    FROM sys.dm_tran_session_transactions;
    

    使用显式事务确实会返回结果:

    BEGIN TRANSACTION;
    
        -- Row returned    
        SELECT 
            session_id, 
            transaction_id
        FROM sys.dm_tran_session_transactions;
    
    ROLLBACK TRANSACTION;
    

    DMV 是关于内部结构的视图,文档通常不像其他领域那样全面。其中一些可能是因为每次 DMV 行为发生变化时都要经历一个完整的弃用周期是不方便的,但在这种情况下它可能只是一个疏忽。您可以在 Connect 上报告文档缺陷。

    Adam Machanic 在编写他的sp_WhoIsActive工具时发现了 DMV 的各种奇怪的小行为。如果它适合您的目的,您可以使用它而不是尝试编写您自己的监控查询。

    • 6
  2. Kin Shah
    2013-10-02T11:58:00+08:002013-10-02T11:58:00+08:00

    sys.dm_tran_session_transactions是一个中间视图,允许将主要标识在session_id column- sys.dm_exec*DMV 上的 DMV 与其他sys.dm_tran_*DMV 连接起来。此视图将判断事务是用户事务is_user_transaction= 1 还是系统事务 is_user_transaction= 0。

    另一方面,sys.dm_tran_active_transactions- 是将存储交易信息的 DMV,显示状态、每个交易的状态 - 已启动但未完成、类型等在 sql server 实例上。它还提供有关分布式事务的信息。此 DMV 将为服务器实例上的所有数据库提供结果,它是当前活动事务的时间点快照 - 每次执行查询时结果都会更改,因为单个事务的状态会更改。

    有关列列表和每列的含义,请参阅sys.dm_tran_session_transactions和sys.dm_tran_active_transactions。

    • 4
  3. Hannah Vernon
    2013-10-02T13:45:19+08:002013-10-02T13:45:19+08:00

    两个 DMV 都是在执行它们的精确时刻发生的事情的快照。因此,很可能在一个繁忙的系统上运行

    SELECT 
    session_id, transaction_id
    FROM sys.dm_tran_session_transactions;
    
    SELECT 
    session_id, transaction_id
    FROM sys.dm_tran_session_transactions;
    

    可以显示不同的结果集。

    • 2

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    授予用户对所有表的访问权限

    • 5 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve