令和2年 午後1 問2 設問2(2)
鈴木さん
(No.1)
空席管理システムで実行するトランザクションの
isolationレベルをread committed、repeatable readのどちらに設定するかと言う問題ですが理解できなくて困っています。
解答見ると、同時実行した他者が同じ座席を仮予約できないようするためrepeatable readとなっています。
おそらく空席管理システムの以下の部分で
read committedで同時実行すると問題ありと言っているのかと理解しています。
(a) トランザクション開始
(b)座席数分以下処理を実施
空席フラグがオンか確認
仮予約がオフか確認
仮予約をオンにする
(c)コミットする
ただ、納得できないのが、read committedでも
同時実行した時に両者が同じ座席は仮予約することはできないのではないでしょうか?
例えばread committed の中でA君とB君が同チケットに対して予約処理をかけた場合
A君が(b)の仮予約をオンにするの処理をした際に
こちらはデータ変更になるので専有ロックされますよね?
ということは専有ロックが解放されるまで
Bは仮予約をオンにする処理はできないと思います。
Aが仮予約をオンにした後→コミットとなり占有ロックは解除されますが、Bからすると
仮予約はすでにオンになっており、仮予約処理はできないのではないでしょうか?
repeatable readなすべきだとは思いますが、その理由はすでに仮予約済みの座席に対して、仮予約処理を行わせないためではないでしょうか?(無駄な処理の削減)
isolationレベルをread committed、repeatable readのどちらに設定するかと言う問題ですが理解できなくて困っています。
解答見ると、同時実行した他者が同じ座席を仮予約できないようするためrepeatable readとなっています。
おそらく空席管理システムの以下の部分で
read committedで同時実行すると問題ありと言っているのかと理解しています。
(a) トランザクション開始
(b)座席数分以下処理を実施
空席フラグがオンか確認
仮予約がオフか確認
仮予約をオンにする
(c)コミットする
ただ、納得できないのが、read committedでも
同時実行した時に両者が同じ座席は仮予約することはできないのではないでしょうか?
例えばread committed の中でA君とB君が同チケットに対して予約処理をかけた場合
A君が(b)の仮予約をオンにするの処理をした際に
こちらはデータ変更になるので専有ロックされますよね?
ということは専有ロックが解放されるまで
Bは仮予約をオンにする処理はできないと思います。
Aが仮予約をオンにした後→コミットとなり占有ロックは解除されますが、Bからすると
仮予約はすでにオンになっており、仮予約処理はできないのではないでしょうか?
repeatable readなすべきだとは思いますが、その理由はすでに仮予約済みの座席に対して、仮予約処理を行わせないためではないでしょうか?(無駄な処理の削減)
2024.09.14 15:52
名無しさん
(No.2)
repeatable read
Aさん仮予約フラグ確認
Bさん仮予約フラグ確認
Aさん仮予約フラグオン
Bさん待機
Aさんトランザクション終了
Bさんトランザクションエラー
------------------------------
read committed
Aさん仮予約フラグ確認
Bさん待機
Aさん仮予約フラグオン
Aさんトランザクション終了
Bさん仮予約フラグ確認、仮予約フラグオンだった処理実施
Aさん仮予約フラグ確認
Bさん仮予約フラグ確認
Aさん仮予約フラグオン
Bさん待機
Aさんトランザクション終了
Bさんトランザクションエラー
------------------------------
read committed
Aさん仮予約フラグ確認
Bさん待機
Aさん仮予約フラグオン
Aさんトランザクション終了
Bさん仮予約フラグ確認、仮予約フラグオンだった処理実施
2024.09.22 14:57
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。