cmu15-445笔记十 并发控制基础-事务
这节课主要介绍并发控制的基础-事务的相关知识点。
事务的隔离性,冲突可串行化。
并发控制理论
并发控制主要关于事务的ACID。
简化模型:将事务表达为一系列的对象读写操作,比如R(A),W(B)等。
原子性
日志
shadow page 阴影页
备份修改页。事务想修改哪些文件页,DBMS就给这些页做备份,事务操作这些备份,如果事务成功提交,那就拿备份替换下原有的页,否则就删除备份,实现回滚。
隔离性
如何实现一个算法,让DBMS能够判断出一系列的读写是否会导致一致性的错误?
术语解释:
(1)schedule 调度
一系列操作的执行顺序被称为数据库系统的执行调度,两个输出结果相同的执行调度被称为是等价调度。
(2)串行调度
按顺序来执行一个个事务,不进行事务操作的交错执行的执行调度是串行调度。
(3)等价
两个输入相同,输出结果也相同的执行调度被称为是等价调度。
(3)可串行调度
如果一个执行调度能够和串行执行等价,那么它就拥有正确的一致性,它也被称作可串行化调度。
那么应该如何判断一个执行调度是可串行化调度呢?如果实现了这一点,DBMS就可以判断出某个调度是否会导致一致性的错误。
首先,需要实现一个证明两个执行调度是等价的算法。
术语解释:
(1)冲突操作
如果两个操作来自不同的事务,它们都在操作同一个数据并且至少其中一个是操作是写,那么这两个操作就是冲突的。比如RW冲突、WR冲突、WW冲突。
冲突操作不能在时间序列上更改先后顺序,否则会改变执行调度的结果。
(2)冲突等价(conflict equivalent)
如果两个执行调度包含了相同事务的相同操作,并且有相同的冲突,那么这两个调度就被称为冲突等效的。
(3)基于冲突的可串行化 Conflict Serializability
如果某个执行调度S和某个真正串行的执行调度冲突等效,那么它就是冲突可串行化的(conflict serializable)。
(4)基于观察的可串行性 View Serializability
基于观察的可串行性说的就是通过观察来确定某个执行调度是可串行还是不可串行,它与冲突可串行性相比,对执行调度的要求要更加宽松,但目前还没有DBMS能实现它。
冲突可串行化的一种算法:基于交换操作先后顺序
如果一个调度S经过交换位于不同事务里,时间上连续,不构成冲突(比如读写不同对象,或者读同一个对象)的位置后可以转换为串行的调度,那么它就是冲突可串行化的。

这个基于swap的算法对于仅包含两个事务的执行调度很有效,但如果调度中有很多事务,这个算法的开销会变得巨大,并不适合。
冲突可串行化的一种算法:基于依赖图

如果一对冲突操作中Ti事务里的0i操作先于Tj事务里的0j操作执行,那么就在依赖图中画从Ti指向Tj的一条有向边。
如果图中出现了环,那么对应的调度就不是可串行化的。
Lecture中所介绍的判断执行调度是否满足冲突可串行化的方法需要等到执行调度里所包括的多个事务都执行完之后才能判断出这个执行调度是否可串行化,但等到执行调度所包括的事务全都执行完并提交了之后,它们就都已经完成了对DBMS的更新,如果这个执行调度是不可串行化的,那么DBMS的一致性就会被破坏,因此这种检测可串行化的方式是无济于事的.
cmu15-445笔记十 并发控制基础-事务