美文网首页PostgreSQL
快照隔离的理论学习

快照隔离的理论学习

作者: EthanHe | 来源:发表于2020-08-31 21:04 被阅读0次

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

形式化表示

为了更好的抽象表示相关操作,在介绍理论框架之前,先行介绍事务处理和并发控制相关的形式化表示。
定义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’

相关文章

  • 快照隔离的理论学习

    本节简单介绍了快照隔离的理论框架。 形式化表示 为了更好的抽象表示相关操作,在介绍理论框架之前,先行介绍事务处理和...

  • MySQL开发中易忽略知识总结-0

    隔离级别 在可重复读隔离级别下,事务在启动的时候就拍另一个快照。注意,这个快照时基于整库的。 InnoDB里面有一...

  • SQL Server 快照隔离

    SQL Server 的早期版本支持 SQL-92 标准中定义的四个隔离级别:READ UNCOMMITTED 是...

  • MySQL/InnoDB 的事务隔离级别和锁

    事务的隔离级别 读分为快照读和当前读。用 MVCC 可解决快照读的脏读、幻读问题,不需要上锁。 Read Unco...

  • 8 - 快照 - 秒级快照如何实现?

    关键字 快照、版本回滚、事务隔离、锁 0.引子 在之前的课程中,我们已经知道,在“可重复读”的事务隔离级别下,My...

  • 事务si和ssi隔离级别

    rr隔离级别:有幻读但无写偏虚 si快照隔离级别:有写偏序但无幻读,写偏序问题的规避留给应用避免,应用使用sele...

  • 2019-03-22

    iOS 屏幕快照(view 截图/快照) layer 快照 view 快照

  • KVM管理快照

    查询正在运行的镜像 创建快照 查看快照 恢复到最新的快照 恢复到某个快照 删除快照

  • KVM虚拟化技术的内置快照和外置快照

    磁盘快照 内置磁盘快照 内部磁盘快照使用单个qcow2文件来保存快照和快照之后的改动。这种快照是libvirt默认...

  • kvm快照功能

    1.创建快照 2.查看快照列表 3.恢复快照 4.查看当前快照 5.快照存储目录 6.删除快照

网友评论

    本文标题:快照隔离的理论学习

    本文链接:https://www.haomeiwen.com/subject/snmpsktx.html