悲観的同時実行制御
競合が起きやすいと想定し、先にデータをロックする同時実行制御の方式(例:SELECT ... FOR UPDATE)。他のトランザクションは待たされる。「先にロック、作業は後」で、楽観的同時実行制御の対極にある。
仕組みはこうだ。トランザクションがデータを変更する前に行をロックし、同じ行に触れたい他のトランザクションは、コミットまたはロールバックでロックが解放されるまでブロックされる。利点は、作業中に他者がデータを変更しないことが保証されるため、更新の喪失が起きず、挙動が予測しやすいこと。代償は、並行性の低下(待ち)とデッドロックのリスク、そして競合が実際にはまれな場合にロックが無駄になることだ。競合が多く、やり直しのコストが高い場合(競合の激しい銀行口座残高など)に向く。対する楽観的同時実行制御は、全員を自由に走らせてコミット時にだけ競合を検出する(バージョン確認やシリアライズ失敗)ので、競合がまれな場合に有利だ。どちらを選ぶかは競合率次第である。デッドロック検出やシリアライズ失敗とも関係が深い。