zoukankan      html  css  js  c++  java
  • 查看数据库中有哪些活动的事务,对应的会话id,执行的语句

    select dbt.database_id,
           DB_NAME(dbt.database_id) '数据库名',
           
           dbt.transaction_id,
           at.name,
           at.transaction_begin_time,
           
           case at.transaction_type         --事务类型   
               when 1 then '读/写事务'  
               when 2 then '只读事务'  
               when 3 then '系统事务'  
               when 4 then '分布式事务'  
           end 'transaction类型',  
             
           case at.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状态',
           
           st.session_id,  
           tt.text as '最近执行的语句',
           
           es.program_name
           
    from sys.dm_tran_database_transactions dbt
    left join sys.dm_tran_active_transactions at
            on dbt.transaction_id = at.transaction_id
    left join sys.dm_tran_session_transactions st
            on at.transaction_id = st.transaction_id
    
    left join sys.dm_exec_sessions es
           on st.session_id = es.session_id
    left join sys.dm_exec_connections ec
           on es.session_id = ec.session_id
    outer apply sys.dm_exec_sql_text(ec.most_recent_sql_handle) tt
    


    进一步查询,这个会话获取了哪些资源

    select db_name(resource_database_id) 'DatabaseName',
           object_name(resource_associated_entity_id) 'TableName',
           request_type,
           request_mode,
           request_status
     select *
     from sys.dm_tran_locks


    再进一步,查询这个会话有没有阻塞其他会话,以及阻塞时间:

    select session_id,              --某个会话
           wait_duration_ms / 1000, --等待秒数
           wait_type,          --等待类型,可能是进程间的阻塞,也有可能是等待IO完成
           
           blocking_session_id --被这个会话阻塞的,如果有的话
           
    from sys.dm_os_waiting_tasks
    where blocking_session_id = xxx


     再进一步,合并上面2个:

    select wt.session_id,              --某个会话
           wait_duration_ms / 1000 as 'wait seconds', --等待秒数
           wait_type,          --等待类型,可能是进程间的阻塞,也有可能是等待IO完成
           
           blocking_session_id, --被这个会话阻塞的,如果有的话
           
           tl.request_mode,     --请求模式,比如S、IX、X
           tl.request_type,     --请求类型,比如Lock
           tl.request_status    --是否grant
    
    from sys.dm_os_waiting_tasks wt
    left join sys.dm_tran_locks tl
           on wt.session_id = tl.request_session_id
     


     

  • 相关阅读:
    JS之四舍五入有小数点
    c# table 怎么在前台循环展示 ViewBag
    c# ajax从后台获取数据list数组 $.each再显示数据
    c# 快捷键
    c#_导出table功能
    c# 缓存详解
    c# url链接转成二维码图片,再转成byte[]二进制流,输出到前段ajax
    JS ajax 返回的json对象 新增属性值(干货)
    tomcat配置HTTPS
    zookeeper集群安装
  • 原文地址:https://www.cnblogs.com/pangblog/p/3364590.html
Copyright © 2011-2022 走看看