热门关键字:  项目经理  分析师  中间件  CEO  报名费





并发控制概述

来源: 作者: 时间:2008-04-02 点击:

多用户数据库系统中,运行的事务很多.事务可以一个一个地串行执行,即每个时刻只有一个事务运行,其它事务必须等待这个事务结束后才能运行,这样可以有效保证数据的一致性,但是串行执行使许多资源处于空闲状态,为了充分利用系统资源,发挥数据库共享资源的特点,应该允许多个事务并行执行.
在单处理机系统中,事务并行执行实际上是这些事务交替轮流执行,这种并行执行方式称为交叉并行方式(Interleaved Concurrency).在多处理机系统中,每个处理机可以运行一个事务,多个处理机可以运行多个事务,真正实现多个事务的并行运行,这种并行执行方式称为同时并行方式(Simultaneous Concurrency).


当多个事务被并行执行时,称这些事务为并发事务.并发事务可能产生多个事务存取同一数据的情况,如果不对并发事务进行控制,就可能出现存取不正确的数据,破坏数据的一致性.对并发事务进行调度,使并发事务所操作的数据保持一致性的整个过程称为并发控制.并发控制是数据库管理系统的重要功能之一.


下面以具体实例说明事务的并行执行可能产生数据不一致性的情形.


1. 丢失修改(Lost Update)


①甲售票员(执行事务T1)读出某次火车的车票余额A,设A=10;
②乙售票员(执行事务T2)读出同次火车的车票余额A,也是A=10;
③甲售票员卖出一张,修改余额A=A-1=10-1=9,修改余额,把9写回数据库.
④乙售票员卖出一张,修改余额A=A-1=10-1=9,修改余额,把9写回数据库.
结果明明卖出2张车票,但数据库中车票余额只减少了一张为9张.事务T1和T2同时读入一个数据并修改,结果T2提交的结果覆盖了T1的结果,导致T1修改的丢失.这种情况为丢失修改.操作过程示例如下:


顺序
事务T1
事务T2

读A=10

读A=10

写A=9

写A=9


2. 读"脏"数据(Dirty Read)


事务T1修改数据后,并将其写回磁盘,事务T2读同一数据,T1由于某种原因被撤消,T1修改的值恢复原值,T2读到的数据与数据库中的数据不一致,是"脏"数据,称为读"脏"数据,读"脏"数据的原因是读取了未提交事务的数据,所以又称为未提交数据.
① 事务T1读A=10;
② 事务T1写A=5;
③ 事务T2读A=5;
④ 事务T1撤消,使A恢复原值A=10;
顺序
事务T1
事务T2

读A=10

写A=5

读A=5

撤消,A=10


3. 不可重复读(Non-Repeatable Read)


事务T1读取数据A后,事务T2更新A,如果T1中再一次读A,两次读的结果不同,读数据称为检索,所以又称为检索不一致.
① 事务T1读A=10;
② 事务T2读A=10;
③ 事务T2写A=5;
④ 事务T1验证原来的A=10,再读,此时A=5;
如果事务T1开始读A=10,而后面读A=5,重新读A结果与前次结果不同.称为不可重复读.除了修改外,不可重复读包括事务T2增加记录和删除记录的情况.如果事务T1按一定条件从数据库中检索读取了某些记录,事务T2删除了其中部分记录,T1再次按相同条件读取数据时,发现某些记录消失.如果事务T1按一定条件从数据库中检索读取了某些记录,事务T2增加了一些记录,T1再次按相同条件读取数据时,发现多了一些记录.
顺序
事务T1
事务T2

读A=10

读A=10

写A=5

验证A=10 读A=5
产生上述三种数据不一致的主要原因是并行操作破坏了事务的隔离性.并发控制就是采用一定调度策略控制并发事务,使事务的执行不受其它事务的干扰,从而避免数据的不一致性.


多个事务的并行执行是正确的,当且仅当其结果与按某一次序串行地执行他们时的结果相同,这种调度策略称为可串行化(Serializable)的调度.可串行性是并发事务正确性的准则.按这个准则规定,一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度.


并发控制方法主要有封锁(Locking)方法,时间戳(TimeStamp)方法,乐观(Optimistic)方法等,主要介绍在DBMS中使用较多的封锁方法.

上一篇:事务的基本概念
下一篇:封锁




最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
企业电子商务

赞助商