×
科目A|データベース
悲観的排他制御は、データ更新の衝突が頻繁に起こることを想定し、データを取得する段階で事前にロックをかける手法です。他のトランザクションによる更新を確実に防ぐことができますが、待機時間が増え、システム全体のパフォーマンスが低下する可能性があります。一方、楽観的排他制御は、データの衝突がめったに起こらないと想定し、データを読み込む時点ではロックをかけず、更新を実行する直前に他者によってデータが変更されていないかを確認する手法です。データ内に「バージョン番号」や「最終更新日時」を保持し、読み込み時と更新時で値が変化していないかを判定します。もし他者に変更されていた場合はエラーとし、処理をロールバック(取り消し)します。この手法はロックの保有期間が短いため、パフォーマンス向上に寄与します。
また、排他制御で頻繁に生じる問題として「デッドロック」があります。これは、2つ以上のトランザクションが互いに相手が保持しているロックの解除を待ち合ってしまい、処理が永久に停止してしまう現象です。デッドロックを防ぐためには、データへのアクセス順序ルールをシステム全体で統一する、あるいはロックの待ち時間にタイムアウト(時間切れ)を設定して強制的に処理を終了させるなどの設計上の工夫が必要です。

試験でのポイント