【Sql】-- 监测数据库表发生死锁脚本

--根据事务ID 和其对应的session_id 找到活动事务对应的执行语句
SELECT DISTINCT 
  dt.text,
  dtl.request_session_id,OBJECT_NAME(dtl.resource_associated_entity_id),
  ds.login_name,
  ds.login_time,    
  ds.host_name,
  ds.program_name,
  case ds.status when 'sleeping' then N'睡眠 - 当前没有运行任何请求 '
      when 'running' then N'正在运行 - 当前正在运行一个或多个请求 '
      when 'Dormancy' then N'休眠 – 会话因连接池而被重置,并且现在处于登录前状态'
      when 'Pre-connected' then N'预连接 - 会话在资源调控器分类器中'
      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 N'未指定'
          when 1 then N'未提交读取'
          when 2 then N'已提交读取'
          when 3 then N'可重复'
          when 4 then N'可序列化'
          when 5 then N'快照'
          end N'会话的事务隔离级别'
  FROM sys.dm_tran_locks dtl
  join sys.dm_exec_sessions ds  on dtl.request_session_id=ds.session_id
  LEFT JOIN sys.dm_exec_connections  dc  on dc.session_id=dtl.request_session_id      --执行连接,最近执行的查询信息  
  cross apply sys.dm_exec_sql_text(dc.most_recent_sql_handle) dt
  WHERE dtl.resource_type='OBJECT'

猜你喜欢

转载自blog.csdn.net/zt15732625878/article/details/80149773
今日推荐