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