在 SQL Server / Azure SQL 中,有没有办法查看查询生成或想要生成的锁?

Alf*_*TeK 4 sql-server azure-sql-database locking

我正在尝试调查锁定情况。我知道如何通过查询查看数据库上的当前锁,sys.dm_tran_locks但我想要的是采用特定的 SQL 查询并对其进行某种“分析”以计算它将生成哪些锁。就像锁的执行计划一样?

这也可以是我运行查询然后查看生成了哪些锁的一种方式,对我来说这是一样的。我只需要一种方法来记录/查看生成的日志,因为我目前只能看到所持有的“实时”锁。

我特别需要尽可能多地了解这些锁的详细信息:类型、模式、它所持有的对象等。

我在 Azure SQL 数据库上。

Dav*_*oft 5

最简单的方法是启动事务,运行查询,然后检查 sys.dm_tran_locks。但这只会显示查询后持有的锁,通常是 U 或 X 锁,或者 REPEATABLE READ 或 SERIALIZABLE 中的 S 锁。例如

if @@trancount > 0 rollback

begin transaction

--run some queries 

select *
from sys.dm_tran_locks
where request_session_id = @@spid 

rollback
Run Code Online (Sandbox Code Playgroud)

要查看语句的锁获取和释放的完整历史记录,请使用 XEvents 或 Profiler 捕获会话的 lock:acquired 和 lock:released 事件。请注意,此跟踪非常详细,因此请勿尝试捕获整个实例或根本在生产服务器上的跟踪。