基于时间戳的调度协议
时间戳:
- 数据库系统赋予事务的唯一的时间标记,以标记该事务开始执行。
- 系统时钟值或逻辑计数值。
时间戳的基本原理:
- 事务的时间戳决定串行化顺序,如果TS(Ti) <TS(Tj) ,则系统必须保证产生的调度等价于Ti,Tj串行调度。
- TS(T)---时间戳
- TS (Ti)<TS (Tj)---事务i比j开始的早
- W(Q)---在数据项Q上成功执行写操作的所有事务的最大时间戳
- R(Q)---在Q上执行读的所有事务的最大时间戳
排序协议:
- 若T执行读操作read(Q)
- 如TS(T)<W(Q),T回退
- 如TS ( T)> =W(Q),执行读操作,并修改:R(Q)=max{TS(T),read(Q)}
- 若T执行写操作write(Q)
- 如TS(T)<R(Q),T回退
- 如TS(T )<W(Q),T回退
- 否则执行T ,并修改:W(Q)=TS(T)
- 被回退的事务系统重新赋予时间戳,重新启动。
基于有效性检验的调度协议
与前两种预防型策略不同,本策略为诊治型。
协议:将事务的生命周期分为三个阶段:
- 读阶段:读数据并保存在局部变量中,以后对该数据的更新均在局部变量上进行。
- 有效性检查阶段:判断是否可以将局部变量的更新复制到数据库中去而不违反可串行性。
- 写阶段:事务通过有效性检查后,更新数据库。
每个事务的这三个阶段都必须是顺序执行的。
此协议中有以下几个标志性点:
- Start(T):T开始执行时间
- Validation(T):完成效性检查的时间
- Finish(T):完成写阶段的时间
- RS(T) :读数据项的集合
- WS(T):写数据项的集合
利用Validation(T)的值, 按时间戳排序决定可串行化顺序。此时TS (T) =Validation(T)。
确认事务有效性时可能发生的错误:
- 1、U在Validation或Finish中,Finish(U)> start(T),RS(T)∩WS(U)非空,U可能在T读X后写X。
-
- 2、U在Validation中, Finish(U)> validation(T),RS(T)∩WS(U)非空,U和T都写X
-
有效性检验规则:对于经过有效性确认,且在T开始前还没有完成的事务Ti ,如果满足以下的条件之一:
-
则Ti和T是可串行化的。
-
数据库系统隔离性级别的控制:
- 严格的隔离性实现机制本身会带来许多问题,同时也降低系统的吞吐量。因此需要系统能根据应用的要求灵活设置隔离级别。
-
【北京工业大学-高级数据库系统】
【https://next.xuetangx.com/course/BJUT08091000021/1075768】