排他制御は2種類ある
- 扱うデータによって2種類の排他制御を使い分ける
- UPDATE, DELETE の実行時は自動で行ロックがかかる
- UPDATE用のデータを取得するSELECTを実行するときにロックするかどうかの話
データの同時更新を防ぐための排他制御
http://codezine.jp/article/detail/6764
A. 悲観的排他制御
- SELECT時にも行ロックを行う(SELECT ~ FOR UPDATE)、ロックしたユーザーしか更新できない。
- 利点:同時実行でも更新の衝突は起きない
- 欠点:パフォーマンスが落ちる。デッドロック(※)の懸念も増える
※2本以上のトランザクションが同タイミングで実行されたとき、
互いのロックにより処理が進まなくなってしまう状態
B. 楽観的排他制御
- SELECT時にはロックをしないので、複数のユーザーが同時に更新できる。
- 利点:SELECT時にロックしない分パフォーマンスが向上する。
- 欠点:同時更新で衝突が起こる可能性