1、工作机制
死锁检测与恢复机制的工作方式如下:检查系统状态的算法周期性地被激活,判断有无死锁。如果发生死锁,则系统要进行恢复。这种机制的基本要求如下:
⑴维护当前已分配给事务的数据项的有关信息以及任何尚未解决的数据项请求信息;
⑵提供一个使用这些信息判断系统是否进入死锁状态的算法;
⑶提供解除死锁的策略。
2、死锁检测
死锁可以用称为等待图的有向图来描述。该图由两部分G=(V,E)组成,其中V是顶点集,E是边集。顶点集由系统中的所有事务组成;如果事务Ti在等待Tj释放所需数据项,则存在从Ti到Tj的一条有向边Ti→Tj。死锁检测算法就是要检查等待图中是否存在有向环,图论中有相应的深度(广度)优先搜索算法。这和前面介绍过的判断冲突可串行化的优先图类似(参阅第十章"事务"的10.9.1和10.9.2小节)。
3、死锁恢复
解除死锁的常用方法是回滚一个或多个事务。在选择要回滚的事务时,要考虑以下情况:
⑴选择使回滚代价最小的事务作为牺牲者,例如:
①该事务已计算了多久?
②该事务已使用了多少数据项?
③完成该事务还需要多少数据项?
④回滚该事务将牵涉多少事务?
⑵决定回滚多远:是彻底回滚,即中止该事务尔后重启;还是部分回滚,即只回滚到可以解除死锁为止;
⑶避免饿死。避免同一事务总是作为回滚代价最小的事务而被选中。最常用的方法就是在代价因素中包含回滚次数。
|
|