データベーススペシャリスト 平成25年春期 午前U 問17

午前U 問17

複数のバッチ処理を並行して動かすとき,デッドロックの発生をできるだけ回避したい。バッチ処理の設計ガイドラインのうち,適切なものはどれか。
  • 参照するレコードにも,専有ロックをかけるように設計する。
  • 大量データに同じ処理を行うバッチ処理は,まとめて一つのトランザクションとして処理するように設計する。
  • トランザクション開始直後に,必要なレコード全てに専有ロックをかける。ロックに失敗したレコードには,しばらく待って再度ロックをかけるように設計する。
  • 複数レコードを更新するときの順番を決めておき,全てのバッチ処理がこれに従って処理するように設計する。

分類

テクノロジ系 » データベース » トランザクション処理

正解

解説

デッドロックとは、共有資源を使用する2つ以上のプロセスが、互いに相手プロセスが必要とする資源を排他的に使用していて、互いのプロセスが相手が使用している資源の解放を待っている状態です。デッドロックが発生するとプロセスは永遠に待ち状態になってしまうため、処理の続行ができなくなってしまいます。
17.gif/image-size:312×159
  • 共有ロックがかけられた資源は、参照を目的とする他のプロセスから共有ロックを許します。しかし専有ロックがかけられた資源は、他のプロセスからのいかなるロックも受け付けずアンロックを待たせます。参照のためだけに専有ロックを使用するとデッドロックが発生しやすくなるため共有ロックを使用すべきです。
  • トランザクションの処理量が多くなると、1つのトランザクションが同時にロックをかける資源数が増えるためデッドロックが発生しやすくなります。
  • 並行処理するプロセス間で資源の競合が生じた場合、すぐにデッドロックが発生してしまいます。
  • 正しい。デッドロックは、複数の資源が別々のプロセスによって排他的に使用され、かつ、その専有順序が異なる場合に発生するため、あらかじめ資源の使用順序を決めておくことが防止策になります。
© 2016-2019 データベーススペシャリストドットコム All Rights Reserved.

Pagetop