事务的状态

关键词:事务的状态,查看事务的状态,事务的监控,事务的执行情况跟踪

转自:https://www.cnblogs.com/micro-chen/p/7722702.html?tdsourcetag=s_pctim_aiomsg

 

[sql] view plain copy
---查看现在所有的事务  
  
select '正在运行事务的会话的 ID'=session_id,                     --session_id与transaction_id的对应关系    
       '事务的 ID'=transaction_id,  
       '正在处理事务的会话中的活动请求数'=enlist_count,    
        '用户or系统事务'=case is_user_transaction when 1 then '事务由用户请求启动'  
                                                    when 0 then '系统事务'  
                                                    end,  
        '本地or分布式事务'= case is_local when 0 then '分布式事务或登记的绑定会话事务'  
                                                    when 1 then '本地事务'  
                                                    end,  
        '分布式事务类型'=case is_enlisted when 0 then '非登记的分布式事务'  
                                                    when 1 then '登记的分布式事务'  
                                                    end,  
        '绑定会话中处于状态'=case is_enlisted when 0 then '事务在通过绑定会话的会话中处于非活动状态。'  
                                                    when 1 then '事务在通过绑定会话的会话中处于活动状态'  
                                                    end        
        from sys.dm_tran_session_transactions  --会话中的事务,识别所有打开的事务     
        where is_user_transaction =1    
  
  
----活动事务的具体信息    
select dt.transaction_id,    
       dt.name,                            
       dt.transaction_begin_time,    
       case dt.transaction_type           
           when 1 then '读/写事务'    
           when 2 then '只读事务'    
           when 3 then '系统事务'    
           when 4 then '分布式事务'    
       end 'transaction type',    
           
       case dt.transaction_state    
           when 0 then '事务尚未完全初始化'    
           when 1 then '事务已初始化但尚未启动'    
           when 2 then '事务处于活动状态'    
           when 3 then '事务已结束。该状态用于只读事务'    
           when 4 then '已对分布式事务启动提交进程'    
           when 5 then '事务处于准备就绪状态且等待解析'    
           when 6 then '事务已提交'    
           when 7 then '事务正在被回滚'    
           when 8 then '事务已回滚'    
       end  'transaction state',  
       case dt.dtc_state  
            when 1 then '活动'  
            when 2 then '准备就绪'  
            when 3 then '已提交'  
            when 4 then '中止'  
            when 5 then '已恢复'  
            end dtc_state  
                
from sys.dm_tran_active_transactions dt    --活动的事务    
where transaction_id = 123    
  
  
---根据事务ID 和其对应的session_id 找到活动事务对应的执行语句  
  
select  dc.session_id,  
        ds.login_name,  
        ds.login_time,                 
        dc.connect_time,  
        dc.client_net_address,   
        ds.host_name,  
        ds.program_name,  
        case ds.status when 'sleeping' then '睡眠 - 当前没有运行任何请求 '  
                        when 'running' then '正在运行 - 当前正在运行一个或多个请求 '  
                        when 'Dormancy' then '休眠 – 会话因连接池而被重置,并且现在处于登录前状态'  
                        when 'Pre-connected' then '预连接 - 会话在资源调控器分类器中'  
                        end as status ,  
        ds.cpu_time as cpu_time_ms,  
        ds.memory_usage*8 as memory_kb,  
        ds.total_elapsed_time as total_elapsed_time_ms,  
        case ds.transaction_isolation_level when 0 then '未指定'  
                                        when 1 then '未提交读取'  
                                        when 2 then '已提交读取'  
                                        when 3 then '可重复'  
                                        when 4 then '可序列化'  
                                        when 5 then '快照'  
                                        end '会话的事务隔离级别',   
        dt.text                
from sys.dm_exec_connections  dc        --执行连接,最近执行的查询信息    
cross apply sys.dm_exec_sql_text(dc.most_recent_sql_handle) dt  
join sys.dm_exec_sessions ds  on dc.session_id=ds.session_id  
where dc.session_id = 55  
复制代码
 

[sql] view plain copy  
---查看现在所有的事务  
  
select '正在运行事务的会话的 ID'=session_id,                     --session_id与transaction_id的对应关系    
       '事务的 ID'=transaction_id,  
       '正在处理事务的会话中的活动请求数'=enlist_count,    
        '用户or系统事务'=case is_user_transaction when 1 then '事务由用户请求启动'  
                                                    when 0 then '系统事务'  
                                                    end,  
        '本地or分布式事务'= case is_local when 0 then '分布式事务或登记的绑定会话事务'  
                                                    when 1 then '本地事务'  
                                                    end,  
        '分布式事务类型'=case is_enlisted when 0 then '非登记的分布式事务'  
                                                    when 1 then '登记的分布式事务'  
                                                    end,  
        '绑定会话中处于状态'=case is_enlisted when 0 then '事务在通过绑定会话的会话中处于非活动状态。'  
                                                    when 1 then '事务在通过绑定会话的会话中处于活动状态'  
                                                    end        
        from sys.dm_tran_session_transactions  --会话中的事务,识别所有打开的事务     
        where is_user_transaction =1    
  
  
----活动事务的具体信息    
select dt.transaction_id,    
       dt.name,                            
       dt.transaction_begin_time,    
       case dt.transaction_type           
           when 1 then '读/写事务'    
           when 2 then '只读事务'    
           when 3 then '系统事务'    
           when 4 then '分布式事务'    
       end 'transaction type',    
           
       case dt.transaction_state    
           when 0 then '事务尚未完全初始化'    
           when 1 then '事务已初始化但尚未启动'    
           when 2 then '事务处于活动状态'    
           when 3 then '事务已结束。该状态用于只读事务'    
           when 4 then '已对分布式事务启动提交进程'    
           when 5 then '事务处于准备就绪状态且等待解析'    
           when 6 then '事务已提交'    
           when 7 then '事务正在被回滚'    
           when 8 then '事务已回滚'    
       end  'transaction state',  
       case dt.dtc_state  
            when 1 then '活动'  
            when 2 then '准备就绪'  
            when 3 then '已提交'  
            when 4 then '中止'  
            when 5 then '已恢复'  
            end dtc_state  
                
from sys.dm_tran_active_transactions dt    --活动的事务    
where transaction_id = 123    
  
  
---根据事务ID 和其对应的session_id 找到活动事务对应的执行语句  
  
select  dc.session_id,  
        ds.login_name,  
        ds.login_time,                 
        dc.connect_time,  
        dc.client_net_address,   
        ds.host_name,  
        ds.program_name,  
        case ds.status when 'sleeping' then '睡眠 - 当前没有运行任何请求 '  
                        when 'running' then '正在运行 - 当前正在运行一个或多个请求 '  
                        when 'Dormancy' then '休眠 – 会话因连接池而被重置,并且现在处于登录前状态'  
                        when 'Pre-connected' then '预连接 - 会话在资源调控器分类器中'  
                        end as status ,  
        ds.cpu_time as cpu_time_ms,  
        ds.memory_usage*8 as memory_kb,  
        ds.total_elapsed_time as total_elapsed_time_ms,  
        case ds.transaction_isolation_level when 0 then '未指定'  
                                        when 1 then '未提交读取'  
                                        when 2 then '已提交读取'  
                                        when 3 then '可重复'  
                                        when 4 then '可序列化'  
                                        when 5 then '快照'  
                                        end '会话的事务隔离级别',   
        dt.text                
from sys.dm_exec_connections  dc        --执行连接,最近执行的查询信息    
cross apply sys.dm_exec_sql_text(dc.most_recent_sql_handle) dt  
join sys.dm_exec_sessions ds  on dc.session_id=ds.session_id  
where dc.session_id = 55  

 

posted @ 2019-04-08 14:41  郭大侠1  阅读(841)  评论(0编辑  收藏  举报