




已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章 并发控制技术,并发控制,为什么要并发执行事务? 为什么要进行并发控制? 如何进行并发控制? 如何解决并发控制可能带来的问题? 如何保证并发控制的灵活性和效率?,为什么要并发执行事务(一),串行执行方式,t2,t1,time,为什么要并发执行事务(二),并发执行方式,t2,t1,time,为什么要并发执行事务(三),并发执行的优点 一个事务由不同的步骤组成,所涉及的系统资源也不同。这些步骤可以并发执行,以提高系统的吞吐量,改善系统的资源的利用率。 系统中存在着周期不等的各种事务,串行会导致难以预测的时延。采用并发会减少平均响应时间,特别是改善短事务的响应时间。,并发执行的问题:丢失修改,两个事务t1和t2读入同一数据并修改, t2提交的结果破坏了t1提交的结果,导致t1的修改被丢失。,t2,t1,time,c=200,c=100,并发执行的问题:不可重复读,事务t1读取某一数据后,事务t2对其做了修改,当事务t1再次读取该数据时,得到与前一次不同的值。,t2,t1,time,d=1,并发执行的问题: 不可重复读之幻影行,事务t1按照一定条件从数据库中读取了某些数据记录后,事务t2删除了其中部分记录,当t1再次按照相同条件读取数据时,发现某些记录神秘的消失了。,t1,t2,time,select count (*) from sc where cno = c1 返回2行,select count (*) from sc where cno=c1,返回1行,并发执行的问题: 不可重复读之幻影行,事务t1按照一定条件从数据库中读取了某些数据记录后,事务t2插入了一些记录,当t1再次按照相同条件读取数据时,发现多了一些记录。,t1,t2,time,select count (*) from sc where cno = c1 返回2行,select count (*) from sc where cno = c1,返回3行,并发执行的问题:读“脏”数据,读“脏”数据(dirty read) 是指事务t1修改某一数据,并将其写回磁盘,事务t2读取同一数据后,t1由于某种原因被撤销,这时t1已修改过的数据恢复为原值,t2读到的数据就与数据库中的不一致,则t2读到的数据就为“脏”数据。,t2,t1,time,c=0,并发控制的必要性,需要进行并发控制的原因: 如果不进行并发控制,当多个事务并发执行的时候,有可能会相互影响,从而读取或者存储不正确的数据,破坏数据库的一致性。,并发控制(一),并发执行事务情况分析: t1:读或写数据项a, t2:读或写数据项b t1:读数据项a, t2:读数据项a t1:写数据项a, t2:写数据项a t1:读数据项a, t2:写数据项a t1:写数据项a, t2:读数据项a 总结,造成并发执行事务问题的原因是: 多个事务同时存取同一个数据集合, 并且其中至少有一个事务对该数据集合进行了更新操作,没有问题,没有问题,丢失修改,不可重复读,读“脏”数据,并发控制(二),解决问题的思路 避免不同事务同时对同一数据进行可能导致数据不一致的操作。 采用的技术封锁(locking) 封锁就是事务t在对某个数据对象如表、记录等操作之前,先向系统发出请求,对其加锁,从而对该数据对象有了一定的控制,在事务t释放它的锁之前,其他事务不能更新此数据对象。,并发控制(三),封锁的类型 排它锁(x锁,exclusive lock):事务t对数据对象a加上x锁,则只允许t读取和修改a,其它事务对a的任何封锁请求都不能成功(因而不能读取和修改r),直至t释放a上的x锁。 共享锁(s锁,share lock):事务t对数据对象a加上s锁,则事务t可以读取但不能修改a,其它事务只能对a加s锁(因而可以读取a),而不能对a的加x锁(因而不能修改a),直到t释放a上的s锁。,并发控制(四),相容矩阵,不相容请求,相容请求,并发控制(五),一级封锁协议 事务t在修改数据r之前必须对其加x锁,直到事务结束才释放。事务结束包括正常结束(commit)和非正常结束(rollback)。 一级封锁协议可以防止丢失修改,并保证事务t是可恢复的。在一级封锁协议中,如果仅仅是读数据而不对其进行修改,是不需要对其加锁的,因此它不能保证可重复读和不读“脏”数据。,并发控制(六),可以避免丢失修改,并发控制(七),不能避免不可重复读,并发控制(八),不能避免读脏数据,并发控制(九),二级锁协议 二级锁协议是:一级锁协议加上事务t在读取数据r之前必须先对其加s锁,读完后即可释放s锁。 二级锁除了防止丢失修改,还可以进一步防止读“脏”数据。但由于读完后即可释放s锁,所以不能保证可重复读。,并发控制(十),不读脏数据,并发控制(十一),不能避免不可重复读,并发控制(十二),三级锁协议 三级锁协议是:一级锁协议加上事务t在读取r之前必须对其加s锁,直到事务结束才释放。三级封锁协议除了防止丢失修改和读“脏”数据以外,还进一步防止了不可重复读。,并发控制(十三),可重复读,并发控制(十四),并发控制(十五),问题: 是否使用的锁协议级别越高越好呢? sql-92标准中的隔离级别 read uncommitted(一级锁协议) read committed(二级锁协议) repeatable read(三级锁协议) serializable sql server中设置隔离级别的方法 set transaction isolation level ,死锁与活锁(一),活锁,死锁与活锁(二),死锁(deadlock) 定义 在数据库运行期间,如果存在一个事务集合=t0,t1,tn,使得t0等待t1持有的数据项锁, , tn-1等待tn持有的数据项锁, tn等待t0持有的数据项锁,则称系统处于死锁状态, 称为死锁事务集合。,死锁与活锁(三),死锁,死锁与活锁(四),解决死锁的方法 预防死锁 死锁检测和恢复,死锁与活锁(五),预防死锁 一次封锁法 一次封锁法要求每个事务必须一次将其所有要使用的数据全部加锁,否则就不能执行。 一次加锁法可以有效地防止死锁的发生,但由于需要扩大加锁的范围,因此降低了系统的并发度。 顺序封锁法 顺序封锁法是预先对数据对象规定一个封锁顺序,所有的事务都要按照这个顺序实行封锁。 顺序封锁法可以有效地防止死锁,但其实施由于数据库中数据的不断变化和事务封锁要求的动态提出而难度很大。,死锁与活锁(六)一次封锁法,死锁与活锁(七)顺序封锁法,死锁与活锁(六),死锁检测 超时法 如果一个事务的等待时间超过了规定的期限,就认为发生了死锁。 等待图法 事务等待图是一个有向回路g=(t, u)。t为结点的集合,每个结点表示正在运行的事务;u为边的集合,每条边表示事务等待的情况。若t1等待t2,则t1,t2之间画一条有向边,从t1指向t2。事务等待图动态地反映了所有事务的等待情况。并发控制子系统周期性的检测事务等待图,如果发现图中存在回路,则表示系统出现死锁。,死锁与活锁(七),t2,t1,t3,死锁与活锁(八),死锁恢复 dbms的并发控制子系统一旦检测到系统中存在死锁,就要设法解除。通常采用的方法是选择一个处理死锁代价最小的事务,将其撤销,释放此事务持有的所有锁,使其他事务得以继续运行下去。对于所撤销的事务所作的操作必须加以恢复。,事务的调度与可串行性,串行调度 在串行调度中,属于同一事务的指令紧挨在一起。 对于有n个事务的事务组,可以有n!个有效调度。 并行调度 在并行调度中,来自不同事务的指令可以交叉执行。,可串行性调度(一),问题:计算机系统对并发事务中并发操作的调度是随机的,而不同的调度可能产生不同的结果,那么哪个结果是正确的呢? 定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行的执行它们时的结果相同,我们称这种调度策略为可串行化调度。一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。,可串行性调度(二),可串行性调度(三),可串行性调度(四),两段锁协议(two-phase locking) 在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁。 在释放一个封锁之后,事务不再获得任何其它封锁。,可串行性调度(五),所谓两阶段锁协议的含义是指所有事务必须分两个阶段对数据项加锁和解锁。第一阶段是获得封锁也称扩展阶段。在这一阶段,事务可以申请获得任何数据项上的任何类型的封锁,但不能释放任何锁。第二阶段是释放阶段,也称收缩阶段。在这阶段,事务可以释放任何数据项上的任何类型的封锁,但是不能够再申请任何锁。 定理:若所有事务均遵从两段锁协议,则这些事务的所有并行调度都是可串行化的。,可串行性调度(六),可串行性调度(七),可串行性调度(八),两阶段锁协议与死锁,多粒度封锁(一),封锁粒度 封锁对象的大小称为封锁粒度 封锁对象:包括逻辑单元,如:属性值、属性值集合、元组、关系、某索引项、整个索引、整个数据库;和物理单元如:物理页、块。 封锁粒度大,则并发度低,封锁机构简单,开销小。 封锁粒度小,则并发度高,封锁机构复杂,开销高。 如果在一个系统中同时支持多种封锁粒度供不同的事务选择是比较理想的,这种封锁方法称为多粒度封锁(multiple granularity locking)。选择封锁粒度时应同时考虑封锁开销和并发度两个因素,适当选择封锁粒度以达到最优效果。,多粒度封锁(二),多粒度树 多粒度树的根结点是整个数据库,表示最大的粒度。叶结点表示最小的粒度。,数据库,关系rn,关系r1,元组,元组,元组,元组,多粒度封锁(三),多粒度封锁协议 多粒度封锁协议允许多粒度树中的每个结点被独立地加锁。对一个结点加锁意味着这个结点的所有后裔结点也被加以同样类型的锁。因此,在多粒度封锁中一个数据对象可能以两种方式封锁,即: 显式封锁是应事务的要求直接加到数据对象上的封锁。 隐式封锁是该数据对象没有独立加锁,是由于其上级结点加锁而使该数据对象加上了锁。,多粒度封锁(四),意向锁 一般的,对某个数据对象加锁,系统要检查该数据对象上有无显式封锁与之冲突;还要检查其所有上级结点,看本事务的显式封锁是否与该数据对象上的隐式封锁冲突;还要检查其所有下级结点,看上面的显式封锁是否与本事务的隐式封锁冲突。效率很低,因此引入了意向锁。 意向锁的含义是如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。,多粒度封锁(五),三种常用的意向锁
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 快递站点抵押合同范本
- 钢结构签合同范本
- 染料销售合同范本
- 监理合同范本 酬金
- 开公司 投资 合同范本
- 办公座椅购买合同范本
- 施工企业施工合同范本
- 员工集资合同范本
- 面地板装修合同范本
- 联合中标epc合同范本
- GB/T 9871-2008硫化橡胶或热塑性橡胶老化性能的测定拉伸应力松弛试验
- GB/T 26480-2011阀门的检验和试验
- GB/T 19861-2005丙烯酸系阴离子交换树脂强碱基团、弱碱基团和弱酸基团交换容量测定方法
- GB/T 11085-1989散装液态石油产品损耗
- GB 30000.3-2013化学品分类和标签规范第3部分:易燃气体
- 《材料力学》说课-课件
- (完整版)沪教牛津版小学一至六年级英语单词汇总(最新)
- JJF 1587-2016 数字多用表校准规范-(高清现行)
- 完整课件-西方经济学下册(第二版)
- 机械制图教学通用课件(全套)
- 天星择日的基本原理
评论
0/150
提交评论