“消息传递中的崩溃使 2PC 依赖 write ahead log、幂等消息、超时与人工或启发式恢复。它协调数据库分片、消息系统和其他跨资源事务的 commit/abort,但不提供事务隔离;…”
形式陈述 ​
事务调度若与某个逐个完成事务的串行调度具有相同可观察效果,则称可串行化。冲突可串行化采用更易判定的充分且必要刻画:把每个事务作为顶点,若调度中事务
直觉
可串行化把交错历史投影成事务之间的先后约束:只要存在某个串行次序能产生相同观测效果,并发执行就没有暴露不可解释的中间状态。冲突可串行化用读写冲突构造 precedence graph,环表示事务先后要求自相矛盾。它允许所选串行次序违背现实完成时间,所以与严格可串行化不同。
例子与边界
若
若 precedence graph 无环,任一拓扑序都给出一个冲突等价的串行调度。反之,blind write 可能使某历史在 view 意义下可串行化,却因保守的写写冲突边而不冲突可串行化;因此常用的无环判据刻画的是 conflict serializability,而不是所有可能的可串行化定义。
推论与应用
事务事件的先后构成偏序,冲突图无环刻画常用的可串行化。两阶段锁与时间戳排序可直接约束该图,MVCC则保存多个版本并用可见谓词选择读版本;它是一类实现机制,不是可串行化的同义词。
快照隔离让事务读取开始时的一致快照,并以 first-committer-wins 排除并发同项写入,却允许 write skew:两个事务读取对方将覆盖的旧版本、分别写不同数据项时,会形成双向读写反依赖环。完整历史与约束违反由 SI 专页承接,本页保留串行等价与图无环判据。
与线性一致性一样尊重非重叠事务实时顺序的版本称为严格可串行化;原子提交、持久性和可恢复性仍需日志与两阶段提交等独立协议。
参考资料
- Philip A. Bernstein, Vassos Hadzilacos, and Nathan Goodman, Concurrency Control and Recovery in Database Systems, Addison-Wesley, 1987,Chs. 2–3, serializability theory and precedence graphs。
- Jim Gray and Andreas Reuter, Transaction Processing: Concepts and Techniques, Morgan Kaufmann, 1992,Chs. 6–9, transaction histories and serial equivalence。