【问题标题】:Is there a way to determine locks that a given query might apply on SQL objects?有没有办法确定给定查询可能应用于 SQL 对象的锁?
【发布时间】:2016-05-18 04:51:09
【问题描述】:

考虑一个简单的查询,就像一条 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

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

我们是否有工具,例如 Display Estimated Execution Plan 来向我们展示有关锁定给定查询的一些信息?如果不是,我们如何找出给定查询可以在数据库上应用哪种类型的锁,因为它们执行得太快而无法检测到。

【问题讨论】:

    标签: sql-server locking


    【解决方案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 锁定事件类别

    【讨论】:

      猜你喜欢
      • 2021-09-16
      • 2021-12-30
      • 2010-11-20
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      • 2019-03-16
      • 2021-03-10
      • 1970-01-01
      相关资源
      最近更新 更多