快照隔离的理论学习

本节简单介绍了快照隔离的理论框架。

形式化表示

为了更好的抽象表示相关操作,在介绍理论框架之前,先行介绍事务处理和并发控制相关的形式化表示。
定义1:事务Ti是操作opi的有限集合,操作之间严格有序(顺序使用标记表示),opi中的每一个操作op要么是读(通过ri(x)来表示),要么是写(通过w<sbu>i</sbu>(x)来表示),这里的x表示广义的抽象数据项(data item),可能是tuple、page或者relation。标记<i表示按时间排序,每执行完成一个op称为一个步骤(step)。

定义2:设T = {t1,...,tn}是事务集,集合中的每个元素ti = (opi,<i),其中opi表示操作集合,<i表示操作之间的顺序。
T的执行历史h是操作op(s)和顺序<s对的组合,其中:
1)每个事务内的步骤顺序保存在h
2)T中的每个事务要么提交要么回滚
3)T中并发事务的rw和ww冲突是有序的

快照隔离协议

定义6:SI在满足以下两个个规则的前提下产生多版本调度
Rule 1.事务t读取x,其中x是由t启动前已提交事务产生的最新版本
Rule 2.并发事务写集合之间不相交
规则1表示每一个读操作ri(x)都会读到ti启动时最近已提交的写操作数据版本。规则2表示如果事务时间上面有重叠,那么事务不能写同样的数据项。
实现规则2有多种方法,一是FCW(First Commit Wins),在commit时判断,二是FUW(First Update Wins),在更新时判断。Oracle和PostgreSQL使用了FUW,其算法如下:
1.事务T2等待T1的锁释放,如T1提交,则T2立即回滚
2.T1在事务T2尝试写x前提交,T2在尝试写入时回滚
3.如果T1释放了x上的锁,T2允许写x

SQL标准定义的隔离级别

标准定义了四个级别,分别是可串行化、可重复读、读已提交、读未提交。
可串行化
可串行化隔离级别禁止所有并发现象和异象,如同事务串行执行。

可重复读
除幻读外,禁止其他现象和异象。

读已提交
不允许脏读和脏写外。

读未提交
不允许脏写。

可恢复性

定义13:调度s视为可恢复的,需满足以下条件,设ti,tj∈trans(s),如果ti读取了tj写的数据,并且ci∈op(s),那么cj <s ri(x)

参考资料

A Theoretical Study of ‘Snapshot Isolation’

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章