如何查看锁
了解SQL Server在某一时间点上的加锁情况无疑是学习锁和诊断数据库死锁和性能的有效手段。我们最常用的查看数据库锁的手段不外乎两种:
使用sys.dm_tran_locks这个DMV
SQL Server提供了sys.dm_tran_locks这个DMV来查看当前数据库中的锁,前面的图2就是通过这个DMV来查看的.
这里值得注意的是sys.dm_tran_locks这个DMV看到的是在查询时间点的数据库锁的情况,并不包含任何历史锁的记录。可以理解为数据库在查询时间点加锁情况的快照。sys.dm_tran_locks所包含的信息分为两类,以resource为开头的描述锁所在的资源的信息,另一类以request开头的信息描述申请的锁本身的信息。
select
str(request_session_id,4,0) as spid,
convert(varchar(20),db_name(resource_database_id)) as DB_Name,
case when resource_data_id = db_id() and resource_type='OBJECT'
then convert(char(20),object_name(resource_Associated_Entity_id))
else convert(char(20),resource_Associated_Entity_id)
end as object,
convert(varchar(12),resource_type) as resrc_type,
convert(varchar(12),request_type) as req_type,
convert(char(3),request_mode) as mode,
convert(varchar(8),request_status) as status
from sys.dm_tran_locks
order by request_session_id desc