当前位置: 代码网 > it编程>数据库>MsSqlserver > SQLSERVER 查询阻塞SQL以及锁

SQLSERVER 查询阻塞SQL以及锁

2024年08月06日 MsSqlserver 我要评论
t1.resource_associated_entity_id AS [阻塞资源对象],t1.resource_description as [资源描述信息], t1.request_mode AS [请求的锁],SELECT t1.resource_type AS [锁类型], DB_NAME(resource_database_id) AS [数据库名],t1.request_session_id AS [等待会话], t2.wait_duration_ms AS [等待时间],

查询阻塞sql以及锁

  • 查阻塞语句
--查阻塞语句
select text, * from sys.dm_exec_requests   er cross apply  sys.dm_exec_sql_text(er.sql_handle)
  • 查阻塞与锁
--查阻塞与锁
select t1.resource_type as [锁类型], db_name(resource_database_id) as [数据库名],
t1.resource_associated_entity_id as [阻塞资源对象],t1.resource_description as [资源描述信息], t1.request_mode as [请求的锁], 
t1.request_session_id as [等待会话], t2.wait_duration_ms as [等待时间],       
(select [text] from sys.dm_exec_requests as r with (nolock)                      
	cross apply sys.dm_exec_sql_text(r.[sql_handle]) 
    where r.session_id = t1.request_session_id
) as [等待会话执行的批sql],
(select substring(qt.[text],r.statement_start_offset/2, 
		(case when r.statement_end_offset = -1 
		then len(convert(nvarchar(max), qt.[text])) * 2 
		else r.statement_end_offset end )/2) 
	from sys.dm_exec_requests as r with (nolock)
	cross apply sys.dm_exec_sql_text(r.[sql_handle]) as qt
	where r.session_id = t1.request_session_id
) as [等待会话执行的sql],                    
t2.blocking_session_id as [阻塞会话],                                        
(select [text] from sys.sysprocesses as p                                       
	cross apply sys.dm_exec_sql_text(p.[sql_handle]) 
	where p.spid = t2.blocking_session_id
) as [阻塞会话执行的批sql]
from sys.dm_tran_locks as t1 with (nolock)
inner join sys.dm_os_waiting_tasks as t2 with (nolock)
on t1.lock_owner_address = t2.resource_address option (recompile);
  • 查询语句执行情况
select top 1000 t.hostname,
                t.loginame,
                percent_complete,
        [session_id] ,
        der.[request_id] ,
        [start_time] as '开始时间' ,
        der.[status] as '状态' ,
        [command] as '命令' ,
        dest.[text] as 'sql语句' ,
        db_name([database_id]) as '数据库名' ,
        [blocking_session_id] as '正在阻塞其他会话的会话id' ,
        [wait_type] as '等待资源类型' ,
        [wait_time] as '等待时间' ,
        [wait_resource] as '等待的资源' ,
        [reads] as '物理读次数' ,
        [writes] as '写次数' ,
        [logical_reads] as '逻辑读次数' ,
        [row_count] as '返回结果行数',
                t.hostname,
                t.loginame
from    sys.[dm_exec_requests] as der
        cross apply sys.[dm_exec_sql_text](der.[sql_handle]) as dest
                left join sys.sysprocesses t on t.spid=der.session_id
where   [session_id] > 50
       -- and db_name(der.[database_id]) = 'gposdb'
order by [cpu_time] desc
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com