RDS SQL Server提供了死锁统计(DeadLock)页面,展示事务的开始时间、会话ID、被锁资源详情及死锁类型等信息,帮助您快速定位和优化引发死锁的问题SQL及其他异常。本文介绍通过RDS控制台查看RDS SQL Server数据库中的死锁及其详细信息的方法。
背景信息
由于事务的特殊机制,一个事务对特定资源进行修改时会锁定该资源,以防其他并发事务对同一资源进行修改,从而保证数据一致性。
死锁通常由多个事务互相竞争资源引发,例如事务A锁定资源A并尝试修改资源B,而事务B锁定资源B并尝试修改资源A,导致双方相互等待对方释放资源,最终导致死锁,此时系统会自动终止成本较低的SQL语句会话(即受害者会话),使无法完成该会话既定任务。如下图所示:
死锁类型
DeadLock统计页面中包含如下5种死锁类型:
KeyDeadlock
ObjectDeadLock
RIDDeadlock
PageDeadlock
ComplieDeadlock
锁模式
事务访问资源时,会根据访问类型使用不同的锁模式(LockMode),包括以下几种:
共享锁(S):保证目标资源在锁定期间只能被读取,不能被修改。
更新锁(U):预定对目标资源施加排它锁(X),在资源被当前事务施加排它锁之前,保证该资源不会被其他事务修改。
排它锁(X):保证目标资源在锁定期间无法被其他事务访问。
前提条件
不支持RDS SQL Server 2008 R2云盘版实例。
实例所在地域目前仅支持:华东1(杭州)、华东2(上海)、华北1(青岛)、华北2(北京)、华北3(张家口)、华北5(呼和浩特)、华北6(乌兰察布)、华南1(深圳)、华南2(河源)、华南3(广州)、西南1(成都)、中国(香港)、新加坡、阿联酋(迪拜)。
查看死锁详情
访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
在左侧导航栏,选择 。
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)客户端打开并查看。
死锁解决方案及调优建议
- 本页导读 (1)
- 背景信息
- 死锁类型
- 锁模式
- 前提条件
- 查看死锁详情
- DeadLock页面介绍
- 死锁数量概览
- 死锁变化趋势
- 死锁关系图
- 死锁解决方案及调优建议