HOME»データベーススペシャリスト掲示板»平成31 午後1 問3 設問4 (3)

データベーススペシャリスト掲示板

掲示板検索:

[0145]平成31 午後1 問3 設問4 (3)

素人さん(No.1)

AXのP4,P2 
AYのP2,P4
もデッドロックが起こると考えております。
例えば、
@AXのP4をロック
AAZのP2をロック
BAZのP4のロック待ち(@でロックされてるので)
CAXのP2のロック待ち(Aでロックされてるので)

処理の順番てきにこれも起こり得ると考えておりますが、回答としては不適切なのでしょうか?
お手数ですが、ご教示お願いします。

2020.10.11 19:06
同感さん(No.2)

うまく説明はできないのですが、どの処理順で並列実行しても、「P2とP4の組」でデッドロックが発生するより先に、「P4とP9の組」でデッドロックが発生するようですので、「P2とP4の組」では正答にはならないのだと思います。

※私も疑問に思っていたので、AXとAZの処理の並列実行した時、それぞれのトランザクションが在庫テーブルのどの行をロックしているのか、書き起こして確認してみました。(エディタにコピペしていただくと多少見やすくなるかもです)
  かえって混乱させてしまうかもですが、ご参考まで。。

◆図3:デッドロックのケース1

処理1      処理2        在庫テーブルの品番(P1-9)行とそれをロックしている処理
[AX]        [AZ]        P1    P2    P3    P4    P5    P6    P7    P8    P9  
P1          --          --    --    --    --    --    --    --    --    --  
P4          --          --    --    --    --    --    --    --    --    --
P9          --          --    --    --    --    --    --    --    --    --
UPDATE      --          AX    --    --    AX    --    --    --    --    AX  手順A  AXが更新行をロック(P1,P4,P9)
--          P3          AX    --    --    AX    --    --    --    --    AX
--          P7          AX    --    --    AX    --    --    --    --    AX
--          P9          AX    --    --    AX    --    --    --    --    AX
--          UPDATE      AX    --    AZ    AX    --    --    AZ    --    !!  手順A  AZが更新行をロック(P3,P7,P9)←P9はAXのロック開放待ち
P2          --          AX    --    AZ    AX    --    --    AZ    --    AX
P9          --          AX    --    AZ    AX    --    --    AZ    --    AX
UPDATE      --          AX    AX    AZ    AX    --    --    AZ    --    AX  手順D  AXが更新行をロック(P2,P9)
P3          --          AX    AX    AZ    AX    --    --    AZ    --    AX
UPDATE      --          AX    AX    !!    AX    --    --    AZ    --    AX  手順D  AXが更新行をロック(P3)←P3はAZのロック開放待ち

デッドロック発生



◆図4:デッドロックのケース2

処理1  処理2        在庫テーブルの品番(P1-9)行とそれをロックしている処理
[AX]        [AZ]        P1    P2    P3    P4    P5    P6    P7    P8    P9  
P1          --          --    --    --    --    --    --    --    --    --                      
P4          --          --    --    --    --    --    --    --    --    --
--          P3          --    --    --    --    --    --    --    --    --
--          P7          --    --    --    --    --    --    --    --    --
--          P9          --    --    --    --    --    --    --    --    --
--          UPDATE      --    --    AZ    --    --    --    AZ    --    AZ  手順A  AZが更新行をロック(P3,P7,P9)
--          P2          --    --    AZ    --    --    --    AZ    --    AZ
P9          --          --    --    AZ    --    --    --    AZ    --    AZ
UPDATE      --          AX    --    AZ    AX    --    --    --    --    !!  手順A  AXが更新行をロック(P1,P4,P9)←P9はAZのロック開放待ち
--          P4          AX    AZ    AZ    !!    --    --    --    --    --  手順D  AZが更新行をロック(P2,P4)←P4はAXのロック開放待ち

デッドロック発生

2020.10.12 23:19
素人さん(No.3)

丁寧にご回答くださりありがとうございます!
とても分かりやすい図でした!
確かに、先にp4p2で、デッドロックが起きるので、当方の考えでは不適切でしたね。
すっきりしました。
ありがとうございます。

2020.10.18 10:10

返信投稿用フォーム

スパム防止のために初投稿日から10日経過したスレッドへの書き込みは禁止しています。

© 2016-2020 データベーススペシャリストドットコム All Rights Reserved.

Pagetop