【数据库系统】数据库系统概论——第十一章 并发控制
第十一章 并发控制文章目录第十一章 并发控制前言11.1并发控制概述11.2封锁11.3封锁协议11.4活锁和死锁11.4.1活锁11.4.2死锁11.5并发调度的可串行性11.5.1可串行化调度11.5.2冲突可串行化调度11.6两段锁协议11.7封锁的粒度11.7.1多粒度封锁11.7.2意向锁11.8其他并发控制机制11.8.1多版本并发控制11.8.2改进的多版本并发控制11.9小结前言多用户数据库系统是指允许多个用户同时使用的数据库系统。其特点是在同一时刻并发运行的事务数可达数百上千个,多用户数据库系统涉及并行控制。多事务执行方式(1)事务串行执行每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行,不能充分利用系统资源,发挥数据库共享资源的特点。执行方式如下图:(2)交叉并发方式在单处理机系统中,事务的并行执行是这些并行事务的并行操作轮流交叉运行,单处理机系统中的并行事务并没有真正地并行运行,但能够减少处理机的空闲时间,提高系统的效率。执行方式如下图:(3)同时并发方式多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行。本章数据库系统并发控制技术是以单处理机系统为基础的。11.1并发控制概述事务是并发控制的基本单位,并发控制机制的任务是:①对并发操作进行正确调度。②保证事务的隔离性。③保证数据库的一致性。并发操作带来数据的不一致性实例。例:飞机订票系统中的一个活动序列。①甲售票点(事务T1)读出某航班的机票余额A,设A=16;②乙售票点(事务T2)读出同一航班的机票余额A,也为16;③甲售票点卖出一张机票,修改余额A←A-1,所以A为15,把A写回数据库;④乙售票点也卖出一张机票,修改余额A←A-1,所以A为15,把A写回数据库。结果明明卖出两张机票,数据库中机票余额只减少1。说明:①以上情况称为数据库的不一致性,是由并发操作引起的。在并发操作情况下,岁T1,T2两个事务的操作序列的调度是随机的。若按上面的调度序列执行,T1事务的修改就被丢失。因为第4步中T2事务修改A并写回后覆盖了T1事务的修改。②并发操作带来的数据不一致性包括丢失修改、不可重复读、读“脏”数据。③用记号R(x)表示读数据X,W(x)表示写数据X。丢失修改两个事务T1和T2读入同一数据并修改,T2的提交结果破坏了T1提交的结果,导致T1的修改被丢失。上面飞机订票的例子就属此类。不可重复读不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现一次读取结果。不可重复读包括三种情况:(1)事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时,得到与前一次不同的值。T1读取B=100进行运算。T2读取同一数据B,对其进行修改后将B=200写回数据库。T1为了对读取值校对重读B,B为200,与第一次读取值不一致。(2)事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神秘地消失了。(3)事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。后两种不可重复读有时也称为幻影现象。读“脏”数据读“脏”数据是指读到不正确的数据。例:(1)事务T1修改某一数据,并将其写回磁盘。(2)事务T2读取同一数据后,T1由于某种原因被撤销。(3)这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致。(4)T2读到的数据就为“脏”数据,即不正确的数据。T1将C值修改为200,T2读到C为200.T1由于某种原因撤销,其修改作废,C恢复原值100.这时T2读到C为200,与数据库内容不一致,就是“脏“数据。上面三种珊瑚橘不一致的情况主要是因为并发操作破坏了事务的隔离性。并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性。对数据库的应用有时允许某些不一致性。并发控制的主要技术:封锁、时间戳、乐观控制法、多版本并发控制。11.2封锁什么是封锁封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。封锁是实现并发控制的一个非常重要的技术。基本封锁类型一个事务对某个数据对象加锁后究竟拥有什么样的控制由封锁的类型决定。基本封锁类型:排它锁(简记为X锁)、共享锁(简记为S锁)。(1)排它锁排它锁又称为写锁,若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁,保证其他事务在T释放A上的锁之前不能再读取和修改A。(2)共享锁共享锁又称为读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务只能再对A加锁,而不能加X锁,直到T释放A上的锁。保证其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。锁的相容矩阵Y=Yes,相容的请求;N=No,不相容的请求说明:在锁的相容
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2502913.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!