バッチ処理におけるデッドロック回避

データベースにおけるデッドロックは、複数のトランザクションが互いに相手がロックしている資源(レコード等)を要求し合い、お互いに待ち状態に陥って処理が停止してしまう現象です。デッドロックを防止・回避するための設計上の大原則として、「複数の資源に対してロックを掛ける場合は、すべてのトランザクションで『ロックを取得する順番(順序)』を統一する」という方法があります。 各選択肢の解説: ア:参照時に専有ロックを掛けると、並行性が極端に低下し、不要なロック待ちが増えるためデッドロックのリスクも高まります。 イ:大量のデータをまとめて一つのトランザクションで処理すると、ロックする資源の量と時間が増大し、デッドロックの確率が高まります。 ウ:ロックに失敗した際に待って再度ロックを掛ける手法は、タイミングによっては再び競合し根本的なデッドロック回避にはなりません。

複数のバッチ処理を並行して動かすとき、デッドロックの発生をできるだけ回避したい。バッチ処理の設計ガイドラインのうち、適切なものはどれか。

出典令和3年度 春期 情報処理安全確保支援士試験 午前Ⅱ 問21
ア
参照するレコードにも、専有ロックを掛けるように設計する。
イ
大量データに同じ処理を行うバッチ処理は、まとめて一つのトランザクションとして処理するように設計する。
ウ
トランザクション開始直後に、必要なレコード全てに専有ロックを掛ける。ロックに失敗したレコードには、しばらく待って再度ロックを掛けるように設計する。
エ
複数レコードを更新するときにロックを掛ける順番を決めておき、全てのバッチ処理がこれに従って処理するように設計する。