有没有办法确定给定查询可能对SQL对象应用的锁?

时间:2016-05-18 04:51:09

标签: sql-server locking

考虑一个简单的查询,就像select语句一样简单:

select * from Teachers where Name like N'%John%'

一旦我开始此查询,它就会完成。因此,我没有机会看到sp_who2来找出此查询对数据库对象应用了哪种类型的锁。

我可以使用事务语句来扩充此查询:

begin transaction

select * from Teachers where Name like N'%John%'

-- Here, I won't commit transaction, thus holding the lock

但坦率地说,这似乎不是自然锁定检测的正确方法,因为我使用事务语句操纵了默认行为。

我们是否有一个工具,例如显示估计执行计划,以向我们展示有关锁定给定查询的一些信息?如果没有,我们如何找出给定查询可以在数据库上应用什么类型的锁,因为它们被快速执行以便被检测到。

1 个答案:

答案 0 :(得分:1)

很遗憾,您无法事先确定查询可能适用的锁定。

您可以查看Different techniques to identify blocking in SQL Server

  

为了解决阻塞过程,我们首先需要确定   哪个进程是阻塞进程然后如果可能的话杀死进程   阻止过程。 SQL Server有许多不同的方法   识别列出的块和阻塞过程如下:

     
      
  • 活动监控
  •   
  • SQLServer:锁定性能对象
  •   
  • 的DMV      
        
    • sys.dm_exec_requests视图
    •   
    • sys.dm_tran_locks
    •   
    • sys.dm_os_waiting_tasks
    •   
  •   
  • SQL Server Profiler锁定事件类别
  •