web-dev-qa-db-ja.com

wait-dieとwound-waitの違いは何ですか?

Wait-dieとwound-waitの違いは何ですか?

デッドロック防止の両方の手法が同じことを行っていることがわかりました(古いプロセスのロールバック)。

誰でも適切な例でそれらの違いを説明できますか?

28
Nadeem Bhati

Wait-die scheme:これは、デッドロック防止のためのプリエンプティブではない手法です。トランザクションTiが現在Tjが保持しているデータ項目を要求すると、TiのタイムスタンプがTjのタイムスタンプより小さい場合のみ(TiはTjより古い)、Tiはロールバック(ダイ)します。

このスキームでは、トランザクションが別のトランザクションによって競合するロックで既に保持されているリソース(データ項目)のロックを要求する場合、2つの可能性のいずれかが発生する可能性があります-

(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はロールバックされます。

Wound-wait scheme:これは、デッドロック防止のための先制的な手法です。これは、ウェイトダイ方式に対応しています。トランザクションTiが現在Tjが保持しているデータ項目を要求すると、TiはTjのタイムスタンプよりも大きいタイムスタンプがある場合にのみ待機できます。

このスキームでは、トランザクションがリソース(データ項目)のロックを要求した場合、すでに別のトランザクションによって競合するロックが保持されているため、2つの可能性のいずれかが発生する可能性があります-

(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は待機します。

どちらの場合も、後の段階でシステムに入るトランザクションは中止されます。

52
Parth Patel

Parthは詳細な回答を提供しました。ここで別の方法で要約します。

TiがTjが保持するロックを要求すると仮定します。次の表は、待機ダイおよび傷待機スキームに対して実行されるアクションをまとめたものです。

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

どちらのスキームも、古いタイムスタンプを持つ古いトランザクションを好みます。

7
Jingguo Yao

wait-dieolderトランザクションがyoungerトランザクションによってロックされたDB要素をロックしようとすると、waitsyoungerトランザクションがolderトランザクションによってロックされたDB要素をロックしようとすると、diesになります。

wound-waitolderトランザクションがyoungerトランザクションによってロックされたDB要素をロックしようとすると、woundsより若いトランザクション。 youngerトランザクションがolderトランザクションによってロックされたDB要素をロックしようとすると、waitsになります。


参照:

0
Jason Law

どちらの場合も、Oldは常にチャンピオンです。つまり、生き残ります。違いは、より若いトランザクションの観点からです。

若い方が古いトランスによって保持されているリソースを要求している場合。 、待機/ダイでは、古いトランスとして敬意を払うのを待つことができます。若い人が古いトランスに保持されているリソースを要求している場合、傷/ダイでは、彼は古いトランスとしてロールバックすることを強制されます。

両方のスキームで、古いものが失われることはありません。

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

0
Vijnana Yogi