令和4年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問13
テクノロジ/データベース複数のバッチ処理を並行して動かすとき,デッドロックの発生をできるだけ回避したい。バッチ処理の設計ガイドラインのうち,適切なものはどれか。
出典:令和4年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問13
- ア参照するレコードにも,専有ロックを掛けるように設計する。
- イ大量データに同じ処理を行うバッチ処理は,まとめて一つのトランザクションとして処理するように設計する。
- ウトランザクション開始直後に,必要なレコード全てに専有ロックを掛ける。ロックに失敗したレコードには,しばらく待って再度ロックを掛けるように設計する。
- エ複数レコードを更新するときにロックを掛ける順番を決めておき,全てのバッチ処理がこれに従って処理するように設計する。
正解:エ
解説
デッドロックは,複数のトランザクションが互いに異なる順序で複数のレコードのロックを取得しようとしたときに発生します。あらかじめ全てのレコードに対するロック取得順序を統一的に決めておき,全てのバッチ処理がその順序に従ってロックを取得するように設計すれば,循環的なロック待ちが発生せず,デッドロックを回避できます。
選択肢ごとの解説
- ア誤り。参照するレコードにまで専有ロックを掛けると,ロックの競合機会が増えてデッドロックの発生確率がかえって高まります。
- イ誤り。大量データをまとめて一つの巨大なトランザクションにすると,ロック保持時間が長くなり他のトランザクションとの競合期間が延びるため,デッドロックの回避にはつながりません。
- ウ誤り。ロックに失敗したレコードについて単純にしばらく待って再試行する方式では,複数のトランザクションが互いのロック解放を待ち合う状態が繰り返し発生し得るため,デッドロックの回避策として不十分です。
- エ正しい。全てのバッチ処理が同じ順序でロックを取得するように統一しておけば,複数のトランザクションが互いに逆順でロックを取り合う循環待ちの状態が起こらず,デッドロックを回避できます。