You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

precedence graphs在MVCC系统事务可串行化中的应用及疑问

优先图(Precedence Graphs)在MVCC事务可串行化中的应用与Snapshot Isolation解析

一、优先图如何用于MVCC的可串行化研究

优先图(又称冲突图)是分析事务调度可串行性的核心工具:节点代表事务,有向边代表事务间的冲突依赖(rw/wr/ww三种类型)。在MVCC系统中,它的价值体现在两个方面:

  • 可串行性验证:若优先图中不存在环,则调度是冲突可串行化的。MVCC通过多版本减少了部分冲突,但仍需借助优先图判断实际运行时调度的正确性。
  • 隔离级别特征分析:不同隔离级别对事务间的依赖类型有不同限制,优先图能直观展示这些限制——比如Snapshot Isolation(快照隔离)下的依赖结构就和可串行化级别有明显差异。

二、解析Snapshot Isolation下"无WW依赖"的结论

先明确几个关键概念:

  • WW依赖:事务T1修改数据X后提交,事务T2随后也修改X并提交,此时存在T1→T2的WW依赖。
  • 写集相交:两个事务的修改集合有重叠(即都修改了同一个数据项)。

Cockroach文档里的结论逻辑其实很清晰,核心是Snapshot Isolation的写冲突检测机制从根源上避免了并发成功提交事务的写集相交:

  1. 当事务T2准备提交时,会检查自己写集中的所有数据项,看是否在T2启动后被其他已提交事务修改过(这就是写冲突检测)。
  2. 如果发现冲突,T2会被直接中止重试,无法完成提交。
  3. 这意味着,任何两个成功提交的并发Snapshot事务,它们的写集一定没有交集——因为写集相交的话,其中一个必然会在提交阶段被中止,根本到不了提交完成的状态。
  4. 而WW依赖的前提是两个事务都修改了同一个数据项且都成功提交,既然Snapshot Isolation下这种情况不可能发生,自然不存在WW依赖。

至于rw依赖,Snapshot Isolation是允许的:比如事务T1读取了数据X的某个旧版本,之后事务T2修改X并提交,此时T1→T2的rw依赖是存在的——因为T1读的是T2修改前的状态,两者的操作存在逻辑上的先后依赖。

三、推荐的学习资料

书籍

  • 《数据库系统概念》:第15章系统讲解了事务隔离级别、可串行化理论和冲突图,对MVCC和Snapshot Isolation的原理有清晰的推导。
  • 《Transaction Processing: Concepts and Techniques》:事务处理领域的经典教材,深入覆盖优先图、隔离级别实现机制等核心内容,适合深挖底层原理。

文章

  • 《A Critique of ANSI SQL Isolation Levels》:这篇论文首次明确了Snapshot Isolation的定义和边界,对比了它与严格可串行化的差异,是理解Snapshot Isolation的必读文献。
  • CockroachDB官方《Transaction Isolation》文档:可以结合其中的MVCC实现细节反复研读,它能帮你把理论和实际工程落地联系起来。

内容的提问来源于stack exchange,提问作者GionJh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 01:45:38