Alf*_*TeK 4 sql-server azure-sql-database locking
我正在尝试调查锁定情况。我知道如何通过查询查看数据库上的当前锁,sys.dm_tran_locks
但我想要的是采用特定的 SQL 查询并对其进行某种“分析”以计算它将生成哪些锁。就像锁的执行计划一样?
这也可以是我运行查询然后查看生成了哪些锁的一种方式,对我来说这是一样的。我只需要一种方法来记录/查看生成的日志,因为我目前只能看到所持有的“实时”锁。
我特别需要尽可能多地了解这些锁的详细信息:类型、模式、它所持有的对象等。
我在 Azure SQL 数据库上。
最简单的方法是启动事务,运行查询,然后检查 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 事件。请注意,此跟踪非常详细,因此请勿尝试捕获整个实例或根本在生产服务器上的跟踪。