令和3年春期試験問題 午前Ⅱ 問21

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

  • 参照するレコードにも,専有ロックを掛けるように設計する。
  • 大量データに同じ処理を行うバッチ処理は,まとめて一つのトランザクションとして処理するように設計する。
  • トランザクション開始直後に,必要なレコード全てに専有ロックを掛ける。ロックに失敗したレコードには,しばらく待って再度ロックを掛けるように設計する。
  • 複数レコードを更新するときの順番を決めておき,全てのバッチ処理がこれに従って処理するように設計する。
正解 問題へ
分野 :テクノロジ系
中分類:データベース
小分類:トランザクション処理
解説
デッドロックとは、共有資源を使用する2つ以上のプロセスが、互いに相手プロセスが必要とする資源を排他的に使用していて、互いのプロセスが相手が使用している資源の解放を待っている状態です。デッドロックが発生するとプロセスは永遠に待ち状態になってしまうため、処理の続行ができなくなってしまいます。
21.png
  • 共有ロックがかけられた資源は、参照を目的とする他のプロセスから共有ロックを許します。しかし専有ロックがかけられた資源は、他のプロセスからのいかなるロックも受け付けずアンロックを待たせます。参照のためだけに専有ロックを使用するとデッドロックが発生しやすくなるため共有ロックを使用すべきです。
  • トランザクションの処理量が多くなると、1つのトランザクションが同時にロックをかける資源数が増えるためデッドロックが発生しやすくなります。
  • 並行処理するプロセス間で資源の競合が生じた場合、すぐにデッドロックが発生してしまいます。
  • 正しい。デッドロックは、複数の資源が別々のプロセスによって排他的に使用され、かつ、その専有順序が異なる場合に発生するため、あらかじめ資源の使用順序を決めておくことが防止策になります。

Pagetop