TiDB 的隔离级别 隔离级别的追溯与究明 带你读懂 (tidb ddl)

TiDB 的隔离级别 隔离级别的追溯与究明 带你读懂 (tidb ddl)

Generalized Isolation Level Definitions

介绍

上文所讲的「A Critique of ANSI SQL Isolation Levels」这篇文章在定义隔离级别的时候,对事务的过程也提出了诸多的要求,然而「Generalized Isolation Level Definitions」仅对成功提交的事务做了约束,即所有异常现象都是由成功提交的事务产生的。在例 1-a 中,因为 T1 没有成功提交,所以并没有出现异常,而例 1-b 中 T1 读到了 abort 事务 T2 的写入内容并且提交成功了,产生了异常现象(G1a - Aborted Read)。

「Generalized Isolation Level Definitions」提出了与实现无关的隔离级别定义,并且更清晰的解释了 predicate 和 item 现象所带来的异常区别,提出了对标 ANSI SQL-92 的隔离级别。

依赖图

Adya 首先引入了三类依赖,可以简单的概括为写读(WR),读写(RW)和写写(WW)。含有读的依赖按照读操作的 item 和 predicate 查询类别被细分为两种类型,item 指的是在一个 key 之上产生的依赖;而 predicate 则是指改变了一个 predicate 结果集,包括改变其中某个 item 的值和改变某个 item 在 predicate 下的命中状态。

两个事务间存在依赖则一定程度上代表了两个事务在现实时间中的先后关系,如果两个依赖中分别出现了 T1 先于 T2 和 T2 先于 T1 的现象,那么就证明出现了事务在现实事件中交叉出现的现象,破坏了 Serializable,这是本篇论文的核心观点。

声明:本文来自用户分享和网络收集,仅供学习与参考,测试请备份。