乐观并发控制

关系数据库管理系统里,乐观并发控制(又名“乐观锁”,Optimistic Concurrency Control,缩写“OCC”)是一种并发控制的方法。它假设多用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事务又修改了该数据。如果其他事务有更新的话,正在提交的事务会进行回滚。乐观事务控制最早是由孔祥重(H.T.Kung)教授提出[1]

乐观并发控制多数用于数据竞争(data race)不大、冲突较少的环境中,这种环境中,偶尔回滚事务的成本会低于读取数据时锁定数据的成本,因此可以获得比其他并发控制方法更高的吞吐量

乐观并发控制的阶段

乐观并发控制的事务包括以下阶段:[來源請求]

  • 读取:事务将数据读入,这时系统会给事务分派一个时间戳
  • 校验:事务执行完毕后,进行提交。这时同步校验所有事务,如果事务所读取的数据在读取之后又被其他事务修改,则产生冲突,事务被中断(回滚)。
  • 写入:通过校验阶段后,将更新的数据写入数据库。

优点与不足

乐观并发控制相信事务之间的数据竞争(data race)的概率是比较小的,因此尽可能直接做下去,直到提交的时候才去锁定,所以不会产生任何锁和死锁。但如果直接简单这麽做,还是有可能会遇到不可预期的结果,例如两个事务都读取了数据库的某一行,经过修改以后写回数据库,这时就遇到了问题。

相关条目

参考文献

  1. ^ H.T.Kung and J. Robinson (1981). "On Optimistic Methods for Concurrency Control". ACM Transactions on Database Systems.

外部链接

  1. MSDN - Optimistic Concurrency Control页面存档备份,存于互联网档案馆
  2. On Optimistic Methods for Concurrency Control
  3. On optimistic concurrency control for real-time database systems