IPA過去問ドリル

令和4年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問13

テクノロジ/データベース

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

出典:令和4年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問13

正解:エ

解説

デッドロックは,複数のトランザクションが互いに異なる順序で複数のレコードのロックを取得しようとしたときに発生します。あらかじめ全てのレコードに対するロック取得順序を統一的に決めておき,全てのバッチ処理がその順序に従ってロックを取得するように設計すれば,循環的なロック待ちが発生せず,デッドロックを回避できます。

選択肢ごとの解説

  • 誤り。参照するレコードにまで専有ロックを掛けると,ロックの競合機会が増えてデッドロックの発生確率がかえって高まります。
  • 誤り。大量データをまとめて一つの巨大なトランザクションにすると,ロック保持時間が長くなり他のトランザクションとの競合期間が延びるため,デッドロックの回避にはつながりません。
  • 誤り。ロックに失敗したレコードについて単純にしばらく待って再試行する方式では,複数のトランザクションが互いのロック解放を待ち合う状態が繰り返し発生し得るため,デッドロックの回避策として不十分です。
  • 正しい。全てのバッチ処理が同じ順序でロックを取得するように統一しておけば,複数のトランザクションが互いに逆順でロックを取り合う循環待ちの状態が起こらず,デッドロックを回避できます。
データベーススペシャリストの過去問を演習モードで解く