5.08 concurrent control Based time stamp 基于时间标记并发控制技术
1 5.08 concurrent control Based time stamp 基于时间标记并发控制技术
time stamp:是系统生成的 随时间增长的整数.可以用 系统的时间戳,一般是专设 一个计数器,每启动一个事 务就加一。 每一事务T启动时,赋予当时的时间标记,记为 ts(T).称事务T的时间标记。 同一DBMS,同一时刻只允许启动一个事务,即 系统控制一个时间标记号只赋给一个事务,故 事务的时间标记在系统中唯一。 时间标记协议:要求事务执行等效于按事务 的时间标记,从小到大串行执行,因而它是可 串行化的
2 ⚫ time stamp:是系统生成的 随时间增长的整数.可以用 系统的时间戳,一般是专设 一个计数器,每启动一个事 务就加一。 ⚫ 每一事务T启动时,赋予当时的时间标记,记为 ts(T).称事务T的时间标记。 ⚫ 同一DBMS,同一时刻只允许启动一个事务,即 系统控制一个时间标记号只赋给一个事务,故 事务的时间标记在系统中唯一。 ⚫ 时间标记协议:要求事务执行等效于按事务 的时间标记,从小到大串行执行,因而它是可 串行化的
除给事务加时间标记外,还需 给数据加时间标记: 读时间标记tr: 在读过该数据的所有事务的时 间标记中,取最大的做为tr值。 写时间标记tw: 在写过该数据的所有事务的时间标记中,取最 大的做为tw值。 ● tr,tw随数据库运行不断变化。 ●1 下面分述时间标记协议的实现
3 ⚫ 除给事务加时间标记外,还需 给数据加时间标记: ⚫ 读时间标记tr: 在读过该数据的所有事务的时 间标记中,取最大的做为tr值。 ⚫ 写时间标记tw: 在写过该数据的所有事务的时间标记中,取最 大的做为tw值。 ⚫ tr,tw随数据库运行不断变化。 ⚫ 下面分述时间标记协议的实现
下面分述时间标记协议的实现: 事务T读数据D: Read (D); IFts(T)>=tw(D》 THEN /*符合时间标记协议*/ tr (D):=max{ts(T),tr (D) ELSE rol lback T and restart it with a new ts(T);
4 下面分述时间标记协议的实现: 事务T读数据D: Read(D); IF ts(T)>=tw(D) THEN /*符合时间标记协议*/ tr(D):= max{ts(T),tr(D)} ELSE rollback T and restart it with a new ts(T);
。读只与其他事务的写冲突,在读时,只 须检查tw是否满足时间标记协议。 ● 若不满足就卷回T,并以重新赋予新的时 间标记ts(T)重新启动
5 ⚫ 读只与其他事务的写冲突,在读时,只 须检查tw是否满足时间标记协议。 ⚫ 若不满足就卷回T,并以重新赋予新的时 间标记ts(T)重新启动
2.事务T写数据D: IF ts(T)>=tr (D)AND ts(T)>=tw(D) THEN {write(D) tw:=ts (T)} ELSE rol lback T and restart it with a new ts(T);
6 2.事务T写数据D: IF ts(T)>=tr(D)AND ts(T)>=tw(D) THEN {write(D); tw:=ts(T)} ELSE rollback T and restart it with a new ts(T);
。写与其他事务的读、写操作均冲突: 写时对数据的tw、tr都须检查是否满足 时间标记协议。 。不满足,须卷回T,并以赋于新的ts(T) 重启T
7 ⚫ 写与其他事务的读、写操作均冲突: 写时对数据的tw、tr都须检查是否满足 时间标记协议。 ⚫ 不满足,须卷回T,并以赋于新的ts(T) 重启T
●例:令:ts(T1)<ts(T2) Ti T2 read(A); read(A); A=A-50; 时 write(A) 间 read(B); read(B); print(A+B); Write(B);
8 ⚫ 例:令:ts(T1)< ts(T2) 时 间 T1 T2 read(A); . . . . . . . . . read(B); . . . print(A+B); . . . . . . . . . read(A); A:=A-50; write(A) . . . read(B); . . . Write(B); . .
调度符合时间标记协议。 所以是可串行化的。但 调度不符合两段封锁协议。 也有些调度满足两段协议, 而不满足时间标记协议。 结论:段两封锁协议和时间标记协议, 都不是普遍的可串行化规则。他们都会 不必要的排斥部分可串行化调度(误判 为不可串行化的)
9 ⚫ 调度符合时间标记协议。 所以是可串行化的。但 调度不符合两段封锁协议。 ⚫ 也有些调度满足两段协议, 而不满足时间标记协议。 ⚫结论:段两封锁协议和时间标记协议, 都不是普遍的可串行化规则。他们都会 不必要的排斥部分可串行化调度(误判 为不可串行化的)
Thomas写入规则: 例:ts(T3)<ts(T4) T3 T4 时 间 read(D); write(D); Write(D)方
10 Thomas写入规则: 例:ts(T3)<ts(T4) 时 间 T3 T4 read(D); . . . . . . . . . Write(D); . . . . . . write(D); . . . . .