查看数据库中有哪些活动的事务,对应的会话id,执行的语句
2013-10-11 14:04
423 查看
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
本文出自 “探索SQLServer” 博客,请务必保留此出处http://yupeigu.blog.51cto.com/3323001/1368068
相关文章推荐
- 查看数据库中有哪些活动的事务,对应的会话id,执行的语句
- 查看数据库中有哪些活动的事务,对应的会话id,执行的语句
- oracle 中--怎么查看当前表空间在作什么操作?--查锁,死锁,当前执行时间长的Sql语句,没提交的事务,对象为哪些进程所用
- ORACLE DML LOCK时找出对应SESSION正在执行的SQL语句(ORA-12841,无法变更事务处理中的会话并行 DML 状态)
- oracle 中--怎么查看当前表空间在作什么操作?--查锁,死锁,当前执行时间长的Sql语句,没提交的事务,对象为哪些进程所用
- 查看当前数据库连接数是多少?查看当前正在执行的SQL语句?
- 在数据库中查看一个sql语句的执行时间和SP2-0027错误
- sql语句查看SQL Server 数据库的事务日志
- c# 执行多条SQL语句,实现数据库事务 线性表 Hashtable
- 执行多条SQL语句,实现数据库事务。
- 根据进程id查看进程在做什么(执行的sq语句)
- 数据库里写了很多存储过程,想用SQL语句查出哪些存储过程包含字段(如:user_id)
- 执行多条SQL语句,执行数据库事务(可传入Sql参数)
- 查看oracle数据库最近执行了哪些sql语句
- 如何检测mysql 数据库执行了哪些sql语句 ecshop如何添加商品属性 ecshop 商品属性批量采集入库
- 执行多条SQL语句,实现数据库事务(不可传入Sql参数)
- 用sql语句dbcc log 查看SQL Server 数据库的事务日志
- pl/sql查看后台数据库执行语句
- 用sql语句dbcc log 查看SQL Server 数据库的事务日志
- C# 执行多条SQL语句,实现数据库事务(通过Hashtable存储数据) .