直列化失敗
SERIALIZABLE分離レベルで、同時実行中のトランザクションを有効な直列順序に並べられないと検出したときにデータベースが返すエラー。異常を許す代わりに一方のトランザクションが中断され(「could not serialize access」)、アプリケーションは再試行しなければならない。
仕組み:PostgreSQLのSerializable Snapshot Isolation(SSI)は、トランザクションをMVCCスナップショット上で楽観的に実行させ、互いの読み書きの依存関係を追跡する。直列化可能性を壊すパターン(たとえばライトスキュー)を検出すると、どちらかを直列化失敗で中断する。したがってSERIALIZABLEでは正常で想定内の挙動であり、バグではない。帰結として、アプリにはこのエラーでトランザクションをやり直す再試行ループが必須になる。利点は、重いロックなしに完全な直列化可能性(微妙な異常がないこと)が得られることで、代償は競合が激しいときの再試行である。楽観的並行性制御に近い。MVCCスナップショットやライトスキューと関連する。