Skip to content

可串行化

Serializability

并发事务历史与某个串行事务次序等价的正确性条件。

条目类型
定义

形式陈述

事务调度若与某个逐个完成事务的串行调度具有相同可观察效果,则称可串行化。冲突可串行化采用更易判定的充分且必要刻画:把每个事务作为顶点,若调度中事务 Ti 的某个冲突操作先于 Tj 的操作,则加边 TiTj;调度冲突可串行化当且仅当此前驱图无环,其任一拓扑序给出等价串行顺序。视图可串行化更一般,但定义和判定不同。

直觉

可串行化把交错历史投影成事务之间的先后约束:只要存在某个串行次序能产生相同观测效果,并发执行就没有暴露不可解释的中间状态。冲突可串行化用读写冲突构造 precedence graph,环表示事务先后要求自相矛盾。它允许所选串行次序违背现实完成时间,所以与严格可串行化不同。

例子与边界

T1 写 x 后 T2 读 x,产生边 T1T2;若又有另一个对象导致 T2T1,形成环,调度不冲突可串行化。可串行化不自动保证事务按现实时间顺序出现;严格可串行化还要求尊重非重叠事务的实时先后。它也不独自保证可恢复性、无级联回滚或持久性。

若 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。
关系图谱6 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组