什么是DBMS中的乐观并发控制?


所有数据项在事务结束时更新,如果发现任何数据项与其中的值不一致,则回滚事务。

在事务结束时检查冲突。事务执行期间不进行检查。所有检查一次性完成,因此事务执行开销低。更新在事务结束之前不应用。它们应用于事务空间中的本地副本。

阶段

乐观并发控制有三个阶段,如下所述:

读取阶段

读取各种数据项并将其存储在临时变量(本地副本)中。所有操作都在这些变量中执行,而无需更新数据库。

验证阶段

检查所有并发数据项以确保可串行化,如果事务更新实际上应用于数据库,则不会进行验证。任何值的更改都会导致事务回滚。使用事务时间戳并维护写集和读集。

要检查事务 A 是否不会干扰事务 B,必须满足以下条件:

  • TransB 在 TransA 开始读取阶段之前完成其写入阶段。

  • TransA 在 TransB 完成其写入阶段后开始其写入阶段,并且 TransA 的读集与 TransB 的写集没有共同项。

  • TransA 的读集和写集与 TransB 的写集都没有共同项,并且 TransB 在 TransA 完成其读取阶段之前完成其读取阶段。

写入阶段

如果验证成功,则将事务更新应用于数据库。否则,将丢弃更新并中止和重新启动事务。它不使用任何锁,因此没有死锁,但是可能会发生数据项的饥饿问题。

问题

S: W1(X), r2(Y), r1(Y), r2(X).

T1 -3

T2 – 4

检查时间戳排序协议是否允许调度 S。

解决方案

最初对于数据项 X,RTS(X)=0,WTS(X)=0

最初对于数据项 Y,RTS(Y)=0,WTS(Y)=0

For W1(X) : TS(Ti)<RTS(X) i.e.
   TS(T1)<RTS(X)
TS(T1)<WTS(X)
3<0 (FALSE)

=>转到 else 并执行写入操作 w1(X) 和 WTS(X)=3

For r2(Y): TS(T2)<WTS(Y)
   4<0 (FALSE)

=>转到 else 并执行读取操作 r2(Y) 和 RTS(Y)=4

For r1(Y) :TS(T1)<WTS(Y)
   3<0 (FALSE)

=>转到 else 并执行读取操作 r1(Y)。

For r2(X) : TS(T2)<WTS(X)
   4<3 (FALSE)

=>转到 else 并执行读取操作 r2(X) 和 RTS(X)=4

更新于: 2021-07-06

14K+ 浏览量

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告