数据库管理系统中的饥饿问题

饥饿或活锁是指事务必须等待无限期才能获得锁的情况。

null

饥饿的原因——

  • 如果等待锁定物品的计划不公平。(优先级队列)
  • 受害者选择(重复选择同一事务作为受害者)
  • 资源泄露。
  • 通过拒绝服务攻击。

饥饿可以通过一个例子得到最好的解释——

假设数据库中有3个事务,即T1、T2和T3,它们试图获取数据项“I”的锁。现在,假设调度器将锁授予T1(可能是由于某些优先级),而其他两个事务正在等待锁。一旦T1的执行结束,另一个事务T4也会过来并请求对数据项I的锁定。现在,这一次调度程序将锁定授予T4,而T2、T3必须再次等待。这样,如果新事务继续请求锁,T2和T3可能必须等待一段不确定的时间,这将导致 饥饿 .

饥饿的解决方案——

  1. 提高优先级—— 当一个事务必须等待一段不确定的时间时,就会发生饥饿。在这种情况下,我们可以增加该特定事务的优先级。但这种解决方案的缺点是,另一个事务可能需要等待更长的时间,直到最高优先级的事务出现并继续。
  2. 修改受害者选择算法—— 如果一个事务是重复选择的受害者,那么可以通过降低其优先级来修改算法。
  3. 先到先得的服务方式—— 可以采用公平调度方法,即FCFS,在这种方法中,事务可以按照请求锁的顺序获取项目的锁。
  4. 等待死伤等待计划- 这些方案使用事务的时间戳排序机制。 有关详细研究,请参阅: 等待死伤等待计划
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享