📜  DBMS 中的饥饿

📅  最后修改于: 2021-09-27 14:35:46             🧑  作者: Mango

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

饥饿的原因——

  • 如果锁定项目的等待方案不公平。 (优先队列)
  • 受害者选择。 (同一笔交易被反复选为受害者)
  • 资源泄漏。
  • 通过拒绝服务攻击。

饥饿可以通过一个例子来最好地解释——假设数据库中有 3 个事务,即 T1、T2 和 T3,它们试图获取数据项“I”的锁。现在,假设调度程序将锁定授予 T1(可能是由于某些优先级),而其他两个事务正在等待锁定。 T1 的执行一结束,另一个事务T4 也过来请求解锁数据项I。现在,这次调度程序授予T4 锁定,T2、T3 不得不再次等待。这样,如果新事务不断请求锁,T2 和 T3 可能需要无限期地等待,从而导致饥饿

饥饿的解决方法是什么?

  1. 增加优先级——
    当事务必须无限期等待时会发生饥饿,在这种情况下,我们可以增加该特定事务的优先级。但是这种解决方案的缺点是,其他事务可能必须等待更长时间,直到最高优先级的事务到来并继续进行。
  2. 受害者选择算法的修改 –
    如果交易成为重复选择的牺牲品,则可以通过降低其优先于其他交易的优先级来修改算法。
  3. 先到先得的方法 –
    可以采用一种公平的调度方法,即FCFS,其中事务可以按照请求锁的顺序获取对项目的锁。
  4. 等待死亡和受伤等待计划 –
    这些是使用交易时间戳排序机制的方案。
    详细研究参考:Wait die and Wound wait scheme