1、*,数据库原理及应用,电子科技大学,-,陆鑫,数据库系统原理与开发,5.3,并发控制,事务调度,了解,数据库,并发,事务,控制目的,了解,并发事务调度,控制需要,解决,的,问题,理解并发事务调度原理与策略,【,本节学习目标,】,一、为什么需要并发控制,并发控制目的,支持并发事务处理,使更多用户并行操作,提高系统的并发访问能力。,保证一个事务工作不会对另一个事务工作产生不合理的影响。,当多个事务程序在,DBMS,系统中,同时,运行时,可能会,出现,对一些共享数据,同时,进行,访问,操作,,如,一些事务修改数据,另一些事务读取数据。这些并发的共享数据操作,如果在,DBMS,中没有一定的约束控制,情
2、况下,,可能会带来数据不一致性或事务程序死锁问题。因此,在,多个,事务,并发运行时,,必须进行并发控制处理。,二、并发控制需解决的问题,A=16,读,读,A=A-1,A=A-1,A=15,A=15,A=16,A=16,出售,1,出售,1,事务,T1,事务,T2,执行,结果,分析,:剩余机票数,A,值为,15,,该数据,有错,应为,14,。,1.,丢失更新数据,A=15,售票点,2,机票数量,A,售票点,1,错误分析:,T1,、,T2,两个事务并发执行,它们均对数据库共享数据,A,进行了非锁定资源的读写操作。,当事务,T1,和,T2,均读入该共享数据,A,并修改,,T2,提交的结果破坏了,T1,
3、提交的结果,导致,T1,的修改被丢失。,2.,不可重复读取,问题分析,:,为什么出现不可重复读取?,事务,T1,读取某一数据后,事务,T2,对其做了修改,当事务,T1,再次读该数据时,得到与前一次不同的值。,不可重复读取是指一个事务对一个共享数据重复多次读取,但前后读取的数据不一致。,假如,A,的初始数据为,100,事务,T1,首次读取,A,的值为,100,事务,T1,不知道其它事务修改,A,值,事务,T1,第,2,次读取,A,的值为,200,因此,事务,T1,前后读取数据,A,的值不一致。,(1),事务,T1,按一定条件从数据库中读取了某些数据记录后,事务,T2,删除了其中部分记录,当,T1
4、,再次按相同条件读取数据时,发现某些记录消失了。也称为,不可重复读取,。,(2),事务,T1,按一定条件从数据库中读取某些数据记录后,事务,T2,在其中插入了一些记录,当,T1,再次按相同条件读取数据时,发现多了一些记录。称为,幻象读取,。,同类问题,:,3.,脏数据读取,问题分析,:,事务,T2,并不知道,C,值被,T1,恢复,因此,事务,T2,读取了脏数据。,最终结果:,C,恢复为,100,T2,读取,C,的中间结果为,200,脏数据读取是指一个事务读取了被取消持久化的共享数据。,C,初始值为,100,三、并发事务调度原理与策略,并发事务调度,就是控制多个事务的数据操作语句按照恰当的顺序访
5、问共享数据,使这些事务执行之后,避免造成数据的不一致性,即解决“丢失更新数据”、“不可重复读”、“脏数据读”等问题。,事务并发执行可能带来如下问题:,当多个事务并发存取共享数据时,由于不当的数据操作顺序,可能出现数据不一致性问题(“丢失更新数据”、“不可重复读”、“脏数据读”等问题)。,1.,事务调度原理,在,DBMS,中,事务管理器将并发执行事务的,SQL,数据操作请求提交给并发控制调度器。由并发控制调度器将各个事务的,SQL,数据操作请求按照一定顺序进行调度执行,并完成对数据库缓冲区,的,读写操作。,例,银行客户,A,的账户当前余款为,1000,元,客户,B,的账户当前余款为,1500,元
6、。现在有两个事务,T1,和,T2,,其中,T1,事务将从客户,A,转账,200,元到客户,B,,,T2,事务也将从客户,A,转账,400,元到客户,B,。,2.,事务调度策略,账户,A,余款,=400,元,账户,B,余款,=2100,元,账户,A,余款,=400,元,账户,B,余款,=2100,元,账户,A,余款,=400,元,账户,B,余款,=2100,元,账户,A,余款,=800,元,账户,B,余款,=1900,元,结论,:在事务并发执行中,只有当事务,中数据操作,调度顺序的执行结果与事务串行执行,结果,一样时,该并发事务调度才能保证数据,操作,的,正确性和,一致性。符合这样效果的调度称为,可串行化调度,。,DBMS,并发,事务,调度,目标,:,使并发事务调度,实现的处理结果与,串行化调度,处理结果一致,。,本节学习结束!,