等待死亡和伤口等待有什么区别?

时间:2015-09-26 05:58:06

标签: database deadlock database-deadlocks

wait-die和wound-wait之间有什么区别?

我发现两种预防死锁的技术都在做同样的事情(老回程的回滚)。

有人可以用适当的例子解释他们之间有什么区别吗?

6 个答案:

答案 0 :(得分:51)

等待模式:这是一种防止死锁的非先发制人技术。当事务Ti请求当前由Tj持有的数据项时,允许Ti仅在其时间戳小于Tj的时间戳(即Ti早于Tj)时等待,否则Ti被回滚(死亡)。

在这个方案中,如果一个事务请求锁定一个资源(数据项),该资源已被另一个事务的冲突锁保持,那么可能会发生以下两种可能性之一 -

(1)如果TS(Ti)< TS(Tj) - 即请求冲突锁定的Ti,比Tj更旧 - 然后允许Ti等待数据项可用。

(2)如果TS(Ti)> TS(tj) - 即Ti比Tj更年轻 - 然后Ti死亡。 Ti随后会以随机延迟重新启动,但具有相同的时间戳。

此方案允许较旧的交易等待,但会杀死较年轻的交易。

例如:

假设事务T22,T23,T24分别具有时间戳5,10和15。如果T22请求T23持有的数据项,则T22将等待。如果T24请求T23持有的数据项,则T24将被回滚。

伤口等待方案:这是防止死锁的先发制人技术。它与等待模具方案相对应。当事务Ti请求当前由Tj持有的数据项时,允许Ti仅在其时间戳大于Tj的时间戳时等待,否则Tj被回滚(Tj受到Ti的伤害)。

在这个方案中,如果一个事务请求锁定一个资源(数据项),该资源已被另一个事务保持冲突锁定,则可能发生以下两种可能性之一 -

(1)如果TS(Ti)< TS(Tj),然后Ti迫使Tj回滚 - 即Ti伤口Tj。 Tj稍后以随机延迟重新启动但具有相同的时间戳。

(2)如果TS(Ti)> TS(Tj),然后Ti被迫等待资源可用。

这个方案,允许年轻的交易等待;但是当较旧的交易请求较年轻的交易时,较旧的交易会强制较年轻的交易中止并释放该项目。

例如:

假设事务T22,T23,T24分别具有时间戳5,10和15。如果T22请求T23持有的数据项,则数据项将从T23被抢占,T23将被回滚。如果T24请求T23持有的数据项,则T24将等待。

在这两种情况下,中止进入系统的事务都将中止。

答案 1 :(得分:6)

Parth给出了详细的答案。在这里,我以不同的方式总结它。

假设Ti请求由Tj持有的锁。下表总结了wait-die和wound-wait方案所采取的措施:

                           wait-die         wound-wait
Ti is younger than Tj      Ti dies          Ti waits
Ti is older than Tj        Ti waits         Tj aborts

两种方案都倾向于使用较旧时间戳的较旧交易。

答案 2 :(得分:3)

我会把@JingguoYao的摘要有一点不同。 我只是重新排列了它,因为对我(以及其他像我这样的人)来说,这样读起来更容易。

假定T n 请求由T k 持有的锁。下表总结了为等待-等待和伤口等待方案采取的行动:

                Tn is older than Tk     Tn is younger than Tk
wait-die        Tn waits                Tn dies
wound-wait      Tk aborts               Tn waits

这两种方案都更喜欢带有较早时间戳记的较早事务。

答案 3 :(得分:1)

通过比较可以了解理解两个相关主题的最佳方法。所以, 等候模和伤口等待之间的相似性:

  1. 较旧的交易将“赢得”较新的交易。
  2. 事务重新启动时,它们会保留其时间戳。
  3. 最终,中止的(年轻的)交易将成为系统中最早的交易。

等待模具和伤口等待之间的区别:

  1. 在等待模具中,当较新的事务请求较旧的事务持有锁时,较新的事务将被杀死。
  2. 在等待伤口时,如果较旧的事务请求由较新的事务持有锁,则较新的事务将被杀死。

答案 4 :(得分:0)

在这两种情况下,老是永远的冠军,即将生存。差异来自年轻的交易观点。

如果年轻人正在请求旧的trans持有的资源。在等待/死亡时,他可以等待尊重。如果年轻人正在请求由旧的trans持有的资源,在伤口/死亡中,他将被强制回滚为Old trans。

在这两个计划中,旧的永远都不会丢失。

参见:https://www.tutorialspoint.com/dbms/dbms_deadlock.htm

答案 5 :(得分:0)

等待死:当较旧事务试图锁定被较年轻事务锁定的数据库元素时,它 >等待。当较年轻事务尝试锁定已被较旧事务锁定的数据库元素时,它将死亡

伤口等待:当较旧事务试图锁定已被较年轻事务锁定的数据库元素时,它 >伤害较年轻的交易。当较年轻事务尝试锁定已被较旧事务锁定的DB元素时,它将等待


参考文献: