乐观并发控制

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

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

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

 优点与不足 

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

 相关条目 
 悲观并发控制
 事务隔离
 并发控制

 参考文献 

 外部链接 
 MSDN - Optimistic Concurrency Control 
 On Optimistic Methods for Concurrency Control
 On optimistic concurrency control for real-time database systems

Category:并发控制
Category:数据库管理系统
Category:臺灣戰後時期發明