事务调度与并发控制.doc

事务调度与并发控制.doc

ID:55863437

大小:402.00 KB

页数:14页

时间:2020-06-10

事务调度与并发控制.doc_第1页
事务调度与并发控制.doc_第2页
事务调度与并发控制.doc_第3页
事务调度与并发控制.doc_第4页
事务调度与并发控制.doc_第5页
资源描述:

《事务调度与并发控制.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、四级数据库第八章-事务调度与并发控制8.1并发控制概述    在第七章中己经讲到,事务是并发控制的基本单位,保证事务ACID特性是事务处理的重要任务,而事务ACID特性可能遭到破坏的原因之一是多个事务对数据库的并发操作造成的。为了保证事务的隔离性更一般,为了保证数据库的一致性,DBMS需要对并发操作进行正确调度。这些就是数据库管理系统中并发控制机制的责任。    下面先来看一个例子,说明并发操作带来的数据的不一致性问题。    考虑飞机订票系统中的一个活动序列:    ①甲售票点(甲事务)读出某航班的机票余额A,设A=16;    ②乙售票点(乙事务)

2、读出同一航班的机票余额A,也为16;    ③甲售票点卖出一张机票,修改余额AA-l,所以A为15,把A写回数据库;    ④乙售票点也卖出一张机票,修改余额AA-l,所以A为15,把A写回数据库。结果明明卖出两张机票,数据库中机票余额只减少1。    这种情况称为数据库的不一致性。这种不一致性是由并发操作引起的。在并发操作情况下,对甲、乙两个事务的操作序列的调度是随机的。若按上面的调度序列执行,甲事务的修改就被丢失。这是由于第④步中乙事务修改A并写回后覆盖了甲事务的修改。    仔细分析并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读“脏

3、”数据,如图8.1所示。    1.丢失修改(LostUpdate)    两个事务T1和T2。读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失,如图8.1(a)所示。上面飞机订票例子就属此类。图8.114    2.不可重复读(Non-RepeatableRead)    不可重复读是指事务T1读取数据后,重复T2执行更新操作,使T1无法再现前一次读取结果。具体地讲,不可重复读包括三种情况:   (1)事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时,得到与前一次不同的值。例如在图8.1(b)中,T1

4、读取B=100进行运算,T2读取同一数据B对其进行修改后将B=200写回数据库。T1为了对读取值校对重读B,B己为200,与第1次读取值不一致。   (2)事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神秘地消失了。   (3)事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。    后两种不可重复读有时也称为幻影(PhantomRow)现象。    3.读“脏”数据(DirtyRead)    读“脏”数

5、据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1己修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据,即不正确的数据。例如在图8.1(C)中T1将C值修改为200,T2读到C为200,而T1由于某种原因撤销,其修改作废,C恢复原值100,这时T2读到的C为200,与数据库内容不一致就是“脏”数据。    产生上述三类数据不一致性的主要原因是并发操作破坏了事务的隔离性。并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数

6、据的不一致性。    另一方面,对数据库的应用有时允许某些不一致性,例如有些统计工作涉及数据量很大,读到一些“脏”数据对统计精度没什么影响,这时可以降低对一致性的要求以减少系统开销。并发控制的主要技术是封锁(Locking)。例如在飞机订票例子中,甲事务要修改A,若在读出A前先锁住A,其他事务就不能再读取和修改A了,直到甲修改并写回A后解除了对A的封锁为止。这样,就不会丢失甲的修改。8.2封锁(Locking)    封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事T

7、就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。    确切的控制由封锁的类型决定。基本的封锁类型有两种:排它锁(ExclusiveLocks,简称X锁)和共享锁(ShareLocks,简称S锁)。    排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。    共享锁又称为读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,

8、直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。