用途:在 Azure SQL Database 上诊断当前阻塞链,并读取已捕获的死锁图。
主要能力:用 sys.dm_exec_requests 找出阻塞关系与头阻塞者;用 sys.dm_exec_sessions、sys.dm_exec_connections 与 sys.dm_exec_sql_text 识别空闲但持有事务的会话;通过 sys.dm_xe_database_sessions 等数据库级视图读取 ring buffer 中的 database_xml_deadlock_report;并提供按需复现阻塞的测试脚本。
必要用法:先确认登录是否有 VIEW DATABASE STATE;Basic、S0、S1 与 ElasticPool 需改用 master 中的服务器角色。会话为数据库级,须在用户数据库查询,master 中不存在 sys.dm_xe_sessions。读取死锁需先有捕获会话,可用 capture-with-extended-events 创建。示例命令:sqlcmd -S "$SQL_SERVER" -d "$SQL_DB" -U "$SQL_USER" -P "$SQL_PASSWORD" -C -b -I -W -Q "..."。
适用场景:排查 Azure SQL Database 阻塞、空闲事务头阻塞、死锁图分析。
限制:VIEW SERVER STATE 在 Azure SQL Database 不可授予;无内置 system_health 会话;不要用内置 dl 会话读死锁;不要仅凭单行结果判断无阻塞;不要假设普通 SELECT 会被未提交写阻塞。部分内容基于本地容器测量,云端行为以官方文档为准。