平成25年度 春期 データベーススペシャリスト試験 午前Ⅱ 問17
テクノロジ/データベース複数のバッチ処理を並行して動かすとき,デッドロックの発生をできるだけ回避したい。バッチ処理の設計ガイドラインのうち,適切なものはどれか。
出典:平成25年度 春期 データベーススペシャリスト試験 午前Ⅱ 問17
- ア参照するレコードにも,専有ロックをかけるように設計する。
- イ大量データに同じ処理を行うバッチ処理は,まとめて一つのトランザクションとして処理するように設計する。
- ウトランザクション開始直後に,必要なレコード全てに専有ロックをかける。ロックに失敗したレコードには,しばらく待って再度ロックをかけるように設計する。
- エ複数レコードを更新するときの順番を決めておき,全てのバッチ処理がこれに従って処理するように設計する。
正解:エ
解説
複数のバッチ処理を並行して実行する際にデッドロックを回避するための代表的な設計手法は,複数のレコードを更新する順序をあらかじめ統一的に決めておき,全てのバッチ処理がその順序に従ってロックを取得・更新するように設計することである。これによって,異なるバッチ処理間でロック取得の順序が食い違うことによる循環待ち(デッドロック)の発生を防ぐことができる。
選択肢ごとの解説
- ア誤り。参照するだけのレコードにまで専有ロックをかけると,本来共存できたはずの参照処理同士がロック待ちになり,ロックの競合やデッドロックの危険性はむしろ高まる。
- イ誤り。大量データへの処理を一つの巨大なトランザクションにまとめると,ロックを保持する時間が長くなり,他の処理との競合やデッドロックの危険性が高まる。
- ウ誤り。トランザクション開始直後に必要な全レコードへ一括して専有ロックをかけ,失敗時に再試行させるという方式では,複数のバッチ処理が互いに一部のロックを取得し合ったまま待ち合う状況(デッドロック)を防ぐことができない。
- エ正しい。複数レコードを更新する際の順序をあらかじめ統一しておき,全てのバッチ処理がその順序に従ってロックを取得するように設計すれば,異なる処理間でロック取得順序が入れ違うことによる循環待ち(デッドロック)を防止できる。