複数のバッチ処理を並行して動かすとき、デッドロックの発生をできるだけ回避したい。
バッチ処理の設計ガイドラインのうち、適切なものはどれか。
ア |
参照するレコードにも、専有ロックを掛けるように設計する。 |
イ |
大量データに同じ処理を行うバッチ処理は、まとめて一つのトランザクションとして処理するように設計する。 |
ウ |
トランザクション開始直後に、必要なレコード全てに専有ロックをかける。
ロックに失敗したレコードには、しばらく待って再度ロックをかけるように設計する。 |
エ |
複数のレコードを更新するときの順番を決めておき、全てのバッチ処理がこれに従って処理するように設計する。 |
答え エ
【解説】
ア |
参照するレコードにも、専有ロックをかけるように設計すると、デッドロックの発生が高くなります。
参照するレコードには、共有ロックを使用するべきです。(×) |
イ |
複数のバッチ処理をまとめて一つのトランザクションとして処理するように設計すると、バッチの追加が困難になるため、現実的ではないと思います。(×) |
ウ |
トランザクション開始直後に、必要なレコード全てに専有ロックをかけ、ロックに失敗したレコードには、しばらく待って再度ロックをかけるように設計するには、普通のロック手順でデッドロックの回避にはなりません。(×) |
エ |
複数のレコードを更新するときの順番を決めておき、全てのバッチ処理がこれに従って処理するように設計すると、デッドロックを回避できます。(〇) |
【キーワード】
・デッドロック
【キーワードの解説】
- デッドロック(deadlock)
複数の処理(タスク、トランザクション)で、互いに相手が専有している資源(データ)を専有(ロック)しようとして、処理が停止することです。
処理がA、B、資源がX、Yのときに処理Aが資源Xを専有し、処理Bが資源Yを専有している状態で、処理Aが資源Yの専有待ちになり、処理Bが資源Xの専有待ちになると、処理AとBはデッドロック状態になります。
もっと、「デッドロック」について調べてみよう。
戻る
一覧へ
次へ
|