数据库自治服务DAS为RDS SQL Server提供锁优化功能,您可以通过该功能查看数据库实例中的死锁及其详细信息。
前提条件
-
当前不支持RDS SQL Server 2008 R2云盘版。
-
所在地域为:
华东1(杭州)、华东2(上海)、华北1(青岛)、华北2(北京)、华北3(张家口)、华北5(呼和浩特)、华北6(乌兰察布)、华南1(深圳)、华南2(河源)、华南3(广州)、西南1(成都)、中国(香港)、新加坡、阿联酋(迪拜)。
背景信息
由于事务的特殊机制,一个事务对特定资源进行修改时会锁定该资源,以防其他并发事务对同一资源进行修改,从而保证数据一致性。
死锁通常由多个事务互相竞争资源引发,例如事务A锁定资源A并尝试修改资源B,而事务B锁定资源B并尝试修改资源A,导致双方相互等待对方释放资源,最终导致死锁,此时系统会自动终止成本较低的SQL语句会话(即受害者会话),使无法完成该会话既定任务。如下图所示:

死锁类型
DeadLock统计页面中包含如下5种死锁类型:
-
KeyDeadlock
-
ObjectDeadLock
-
RIDDeadlock
-
PageDeadlock
-
ComplieDeadlock
锁模式
事务访问资源时,会根据访问类型使用不同的锁模式(LockMode),包括以下几种:
-
共享锁(S):保证目标资源在锁定期间只能被读取,不能被修改。
-
更新锁(U):预定对目标资源施加排它锁(X),在资源被当前事务施加排它锁之前,保证该资源不会被其他事务修改。
-
排它锁(X):保证目标资源在锁定期间无法被其他事务访问。
操作步骤
登录DAS控制台。
在左侧导航栏中,单击智能运维中心 > 实例监控。
找到目标实例,单击实例ID,进入目标实例详情页。
-
在左侧导航栏中,单击锁优化 > DeadLock。
-
在DeadLock页,查看数据库实例中的死锁及其详细信息。
页面介绍
-
死锁数量概览统计时段包括近一天、近一周、近两周和近一个月。
可分时段查看近期产生的死锁数量。
-
死锁变化趋势

展示某个时间段内发生的死锁类型。您可以执行如下操作:
-
选择起始日期和结束日期,单击查找显示指定时间段的死锁信息。
说明指定的时间间隔不能超过30天。
-
单击近一天、近一周、近一月快捷查询所选时间段的死锁信息。
-
将鼠标移动到特定的时间点,可查询该时间点内发生的死锁类型和数量。
-
单击趋势图右上角的
图标,切换趋势图的显示样式或下载当前趋势图。
-
-
死锁详细信息
单击左边的
图标可展示相互锁定的会话详情。包含如下内容:-
LastTranStarted:事务开启的时间。
-
SPID:开启事务的会话ID。
-
IsVictim:该会话是否已被终止(kill)。
说明SQL Server解决死锁的方法是通过一个内部线程定期检测系统死锁,发现死锁后,在引发死锁的会话之间终止成本相对较低的会话。例如:SELECT语句的成本比UPDATE更低,系统便会优先终止使用SELECT的会话。
-
LogUsed:会话已经生成的日志大小。单位:字节。
-
LockMode:锁模式。更多信息,请参见锁模式。
-
WaitResourceDesc:当前事务等待中的资源详情。
-
ObjectOwned:已经被锁住的对象。
-
ObjectRequested:当前事务请求加锁的对象。
-
WaitResource:当前事务等待中的资源。
-
HostName:当前事务的主机名称。
-
LoginName:当前事务的账号名称。
-
Status:当前事务的状态。
-
ClientApp:当前事务所使用的客户端名称。
-
SQLText:SQL语句详情。
说明单击该SQL语句可打开SQL语句窗口,单击点击复制可快速复制SQL语句,方便排查或回溯有问题SQL。
单击任意一行内容可在下方展示对应的死锁关系图。
-
-
死锁关系图

展示发生死锁的会话之间的相互关系以及被锁定资源的详细信息。您可以单击点击下载按钮下载XDL文件,该文件中记录了对应当前死锁的详细内容,可通过SQL Server Management Studio(SSMS)客户端打开并查看。