第四节 数据库的并发控制技术_第1页
第四节 数据库的并发控制技术_第2页
第四节 数据库的并发控制技术_第3页
第四节 数据库的并发控制技术_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四节数据库的并发控制技术 ::数据库是一个共享资源,可以供许多用户使用。各个用户程序(通常为一个事务)可以一个一个地串行执行,即每个时刻只有一个用户程序运行,执行数据库的存取操作,其它用户程序必须等到这个用户程序结束后方能对数据库存取。但是,由于用户程序在执行过程中随着时间的不同需要不同的资源,有时需要CPU,有时需要访问磁盘,有时需要I/O,有时需要通讯等,如果只让一个用户程序运行,而其它用户闲置等待,则导致许多系统资源在大部分时间内处于闲置状态。因此,为了充分利用系统资源,发挥数据库共享资源的特点,应该允许各个用户并行地存取数据。但这样就会产生多个用户程序并发存取同一数据的情况。若对并发操作不加控制就可能导致存取和存储不正确的数据,从而破坏数据库的一致性。所以DBMS必须提供并发控制机制,且并发控制机制的好坏是衡量一个DBMS性能的重要指标之一。事务及其特性DBMS的并发控制是以事务(transaction)为单位进行的,因此,本节先介绍事务的概念及其特性。在多用户环境中用户程序不断访问数据库中的数据,构成了若干操作序列,在这些操作序列中,有些操作必须作为一个整体来执行,这些作为一个整体来执行的操作序列称为一个事务(Transaction)。即事务是用户定义的一组操作序列的集合,是数据恢复和并发控制的基本单位。数据库系统在执行事务时,要么执行事务中全部操作,要么一个操作都不执行。一个应用程序往往由若干个独立的事务组成。在应用程序中,事务的开始与结束可以由用户显示地控制。如果用户没有显示地定义事务,则由DBMS自动地按照缺省方式划分事务。在SQL中,用户显示定义事务的语句有如下3条:1、 BEGINTRANSACTION,该语句显示地定义一个事务的开始。2、 COMMIT,该语句显示地提交一个事务,并表示该事务已正常结束。3、 ROLLBACK,该语句显示地回滚一个事务,且表示事务因执行失败而结束。所谓提交事务,就是将该事务对数据库的所有更新操作结果永久地保存到磁盘上的物理数据库中去。所谓回滚事务,就是撤消该事务对数据库的所有更新操作,使数据库恢复到该事务开始时的状态。由以上可知,用户若要显示地定义事务,必须以BEGINTRANSATION开始,而以COMMIT或ROLLBACK结束。事务具有四个特性,即原子性、一致性、隔离性和持续性,又常简称为ACID特性:1、 原子性:即一个事务是不可分割的数据库逻辑工作单位。2、 一致性:事务的执行结果必须使数据库从一个一致性状态变到另一个一致性状态。3、 隔离性:一个事务的执行不能被其它事务干扰。4、 持续性:持续性也称为永久性,指一个事务一旦提交,它对数据库中数据的改变应该是永久性的,其它操作或故障不对其产生任何影响。数据库的并发控制DBMS的并发控制是以事务为单位进行的。数据库在执行事务时,要么执行事务中的全部操作,要么一个操作都不执行。当有多个事务对数据库进行操作时,如果对数据库进行操作的各个事务按顺序执行,即一个事务执行完全结束后,另一个事务才开始,则称这种执行方式为串行访问(Serialaccess)。如果DBMS可以同时接纳多个事务,事务可以在时间上重叠执行,则称这种执行方式为并发访问(Concurrentaccess)。在单CPU系统中,同一时间只能有一个事务占用CPU,若各个事务交叉使用CPU,则称这种并发方式为交叉并发。在多CPU系统中,可以允许多个事务同时占用CPU,这种并发方式称为同时并发。并发的目的在数据库管理系统中对事务采用并发机制的主要目的有两个:1、 改善系统的资源利用率对于一个事务来讲,在不同的执行阶段需要的资源不同,有时需要CPU,有时需要访问磁盘,有时需要I/O、有时需要通信如果事务串行执行,有些资源可能会空闲;如果事务并发执行,则可以交叉利用这些资源,有利于提高系统资源的利用率2、 改善短事务的响应时间设有两个事务T1和T2,其中T1是长事务,交付系统在先;T2是短事务,交付系统比T1稍后。如果串行执行,则须等T1执行完毕后才能执行T2。而T2的响应时间会很长。一个长事务的响应时间长一些还可以得到用户的理解,而一个短事务的响应时间过长,用户一般难以接受。如果T1和T2并发执行,则T2可以和T1重叠执行,可以较快地结束,明显地改善其响应时间。并发所引起的问题数据库中的数据是共享的,即多个用户可以同时使用数据库中的数据,这就是并发操作。但是当多个用户存取同一组数据时,由于相互的干扰和影响,并发操作可能引发错误的结果,从而导致数据的不一致性问题我们将用下面的例子予以说明。例5.5设有一个飞机机票订票系统,考虑如下售票活动的并发操作问题:1、 售票员A通过网络在数据库中读出某航班的机票余额为y张,设y=15;2、 售票员B通过网络在数据库中读出某航班的机票余额为y张,设y=15;3、 售票员A卖出一张机票,然后修改余额为y=y?1,此时,y=14,将14写会数据库;4、 售票员B卖出一张机票,然后修改余额为y=y?1,此时,y=14,将14写会数据库;这个售票活动并发操作的结果是:实际已经卖出2张机票,但在数据库中机票余额仅减少1,从而导致错误。这就是著名的飞机机票订票系统问题。这个问题之所以会产生错误,其根本原因在于两个用户反复交叉地使用同一个数据库的结果。如果事务不加控制地并发执行,会产生以下几个问题:1、 丢失修改(Lostupdate)2、 脏读(Dirtyread)。3、 不能重读(Unrepeatableread)并发控制方法实现现数据库并发控制的方法有多种,常用的有封锁技术、时标技术和版本更新技术等,而封锁技术在商品化数据库管理系统中使用得最为普遍。本节中介绍:封锁技术时标技术封锁技术封锁的定义锁是为了防止其它事务访问指定资源的一种手段。封锁(locking)是实现并发控制的一个非常重要的技术。所谓封锁即是在一段时间内禁止某些用户对数据对象做某些操作,以避免产生数据的不一致性问题。即事务T在对某个数据对象,如表、元组等进行操作之前,先向系统发出请求,并对其加锁。加锁成功后,事务T就对数据对象有了一定的控制权,在事务T释放它的锁之前,其它的事务就不能更新此数据对象。封锁的类型基本的封锁一般有排它锁和共享锁两种类型。排它锁:又称X锁,如果某事务T对某数据建立了排它锁,则该事务能对该数据对象进行读、修改、插入和删除等操作,而其它事务则不能。共享锁:又称S锁,如果某事务对某数据建立了共享锁,则此时该事务能对该数据对象进行读操作,但不能进行修改等更新操作;而其它事务只能对该数据对象加S锁,而不能加X锁,即其它事务只能对该数据对象进行读操作。封锁粒度所谓封锁的粒度,即是被封锁数据对象的大小。在关系数据库中,封锁的粒度有如下几种:属性值、属性值集、元组、关系、索引项、整个索引或整个数据库。还可以是一些物理单元:页(数据页或索引页)、块等等。封锁的粒度与系统的并发度和并发控制的开销密切相关。封锁粒度越大,系统中能够被封锁的对象就越少,并发度也就越小,但同时系统开销也越少;封锁粒度越小,并发度越高,但系统开销也就越大。因此,如果在一个系统中能同时存在不同大小的封锁粒度对象供不同的事务选择使用,是比较理想的。封锁协议封锁的目的是为了保证能够正确地调度和控制并发操作。为此,在运用X锁和S锁这两种基本锁对一定粒度的数据对象加锁时,还需约定一些规则。例如,一个事务何时该申请X锁或S锁、事务持锁时间的长短如何控制、何时释放所获得的锁等等。我们称这些规则为封锁协议(Lockingprotocol)。下面介绍三级封锁协议:1、 一级封锁协议:某事务T若要修改某个数据对象,则必须先对该数据对象加X锁,直到事务结束才释放。此种封锁协议可防止“丢失修改”所产生的数据不一致性问题。2、 二级封锁协议:一级封锁协议加上某事务T若要读取某个数据对象之前,则必须先对该数据对象加S锁,读完后即可释放S锁,这样可进一步防止“读脏数据”的问题。3、 三级封锁协议:一级封锁协议加上某事务T若要读取某个数据对象之前,则必须先对该数据对象加S锁,且知道该事务结束后才可释放S锁,这样可进一步防止数据“不可重复读”的问题。-死锁和活锁活锁:如果事务T1封锁了数据对象R后,事务T2也请求封锁R,于是T2等待。接着T3也请求封锁R。当T1释放了加在R上的锁后,系统首先批准了T3的请求,T2只得继续等待。接着T4也请求封锁R,T3释放R上的锁后,系统又批准了T4的请求,……,因此,事务T2就有可能这样永远地等待下去。以上这种情况就称为活锁。避免活锁的简单办法是采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按封锁请求的先后次序对这些事务排队,该数据对象上的锁一旦释放,首先批准申请队列中的第一个事务获得锁。死锁:如果事务T1封锁了数据对象A,T2封锁了数据对象B之后,T1又申请封锁数据对象B,且T2又申请封锁数据对象A。因T2已封锁7B,于是T1等待T2释放加在B上的锁。因T1已封锁了A,T2也只能等待T1释放加在A上的锁。这样就形成了T1在等待T2结束,而T2又在等待T1结束的局面。T1和T2这两个事务永远不能结束,这就是死锁问题

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论