考虑一个简单的查询,就像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
但坦率地说,这似乎不是自然锁定检测的正确方法,因为我使用事务语句操纵了默认行为。
我们是否有一个工具,例如显示估计执行计划,以向我们展示有关锁定给定查询的一些信息?如果没有,我们如何找出给定查询可以在数据库上应用什么类型的锁,因为它们被快速执行以便被检测到。
答案 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锁定事件类别