📅  最后修改于: 2020-12-12 07:44:23             🧑  作者: Mango
死锁是指两个或多个事务无限期地等待对方放弃锁的情况。死锁被认为是DBMS中最令人担忧的并发症之一,因为没有任务完成并且永远处于等待状态。
例如:在学生表中,事务T1在某些行上持有锁,并且需要更新成绩表中的某些行。同时,事务T2在成绩表中的某些行上保持锁定,并且需要更新事务T1所持有的Student表中的行。
现在,出现了主要问题。现在,事务T1正在等待T2释放其锁定,并且类似地,事务T2正在等待T1释放其锁定。所有活动都停止并处于停顿状态。在DBMS检测到死锁并中止其中一个事务之前,它将保持静止状态。
在数据库中,当事务无限期地等待获取锁时,DBMS应该检测该事务是否涉及死锁。锁管理器维护“等待”图以检测数据库中的死锁周期。
等待上述情况的图表如下所示:
在这种方案中,如果一个事务请求另一个事务已经用冲突锁持有的资源,则DBMS只需检查两个事务的时间戳。它允许较旧的事务等待直到资源可供执行。
假设有两个事务Ti和Tj,并且TS(T)是任何事务T的时间戳。如果T2持有其他事务的锁,并且T1正在请求T2拥有的资源,那么DBMS将执行以下操作: