第9章事务与并发控制_第1页
第9章事务与并发控制_第2页
第9章事务与并发控制_第3页
第9章事务与并发控制_第4页
第9章事务与并发控制_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

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

文档简介

1、第第9 9章章 事务与并发控制事务与并发控制o关于数据库保护关于数据库保护关于数据库保护o保护数据库工作是保护数据库内容正确、不受破坏和保护数据库工作是保护数据库内容正确、不受破坏和不被非法使用。主要包括不被非法使用。主要包括4方面内容方面内容:n完整性控制完整性控制 o静态完整性控制静态完整性控制(4.4)o动态完整性控制动态完整性控制-触发器触发器(12.3)n并发控制并发控制 (第第9章章)n安全性控制安全性控制 (第第14章章)n数据备份与恢复数据备份与恢复 (第第15章章)9.1 事务事务o事务事务(transaction)是作为完整的工作单元执行的一)是作为完整的工作单元执行的一系

2、列操作。系列操作。o如果一个事务中的所有操作都成功,则事务成功,其对如果一个事务中的所有操作都成功,则事务成功,其对数据库的更改都会成为永久性的更改。数据库的更改都会成为永久性的更改。o如果事务中的任何一个操作失败,则整个事务失败,其如果事务中的任何一个操作失败,则整个事务失败,其中所完成的操作均被取消,所有对数据的更改均无效。中所完成的操作均被取消,所有对数据的更改均无效。即即:一个事务内的所有语句被作为一个整体,要么全部执一个事务内的所有语句被作为一个整体,要么全部执行,要么全部不执行。行,要么全部不执行。o一个事务可以是一组一个事务可以是一组sql语句、一条语句、一条sql语句或整个程语

3、句或整个程序。通常情况下,一个应用程序包括多个事务。序。通常情况下,一个应用程序包括多个事务。o事务是数据库并发控制和恢复的基本单位。事务是数据库并发控制和恢复的基本单位。事务概念(举例)o例如:对于一个转帐活动:例如:对于一个转帐活动:a帐户转帐给帐户转帐给b帐户帐户n元钱,元钱,这个活动包含两个动作:这个活动包含两个动作:n第一个动作:第一个动作:a帐户帐户 n n第二个动作:第二个动作:b帐户帐户 no假设第一个动作成功了,但第二个动作由于某种原因没假设第一个动作成功了,但第二个动作由于某种原因没有成功(比如突然停电等)。怎样保证在系统恢复之后,有成功(比如突然停电等)。怎样保证在系统恢

4、复之后,a帐户中的金额是减帐户中的金额是减n前的值呢?这就需要用到事务的前的值呢?这就需要用到事务的概念。概念。o当第二个动作没有成功时,系统自动将第一个动作也撤当第二个动作没有成功时,系统自动将第一个动作也撤销掉,使第一个动作不做。这样当系统恢复正常时,销掉,使第一个动作不做。这样当系统恢复正常时,a帐户和帐户和b帐户中的数值才是正确的。帐户中的数值才是正确的。9.1.2 事务的特性(acid特性) o原子性原子性(atomicity) :指事务是数据库的逻辑工:指事务是数据库的逻辑工作单位,事务中的操作要么都做,要么都不做。作单位,事务中的操作要么都做,要么都不做。 o一致性一致性(con

5、sistency) :指事务执行的结果必须:指事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。是使数据库从一个一致性状态变到另一个一致性状态。o隔离性隔离性(isolation) :指数据库中一个事务的执行:指数据库中一个事务的执行不能被其它事务干扰。不能被其它事务干扰。o持久性持久性(durability) :也称为永久性指事务一旦:也称为永久性指事务一旦提交,则其对数据库中数据的改变就是永久的。提交,则其对数据库中数据的改变就是永久的。 举例:事务及其特征问题:问题:设银行数据库中有一设银行数据库中有一转账事务转账事务t t,从账号,从账号a a转一转一笔款子(笔款子($

6、50$50)到账号)到账号b b。相应的事务:相应的事务: t t:readread(a a);); a:=a50a:=a50; writewrite(a a);); readread(b b);); b:=b + 50b:=b + 50; writewrite(b b). . o原子性(原子性(a,b同时被修改或同时被修改或同时保持原值)同时保持原值)o一致性(一致性(a+b的值不变)的值不变)o隔离性隔离性o持久性持久性事务提交与撤销 事务中操作完成后,可以事务中操作完成后,可以提交事务提交事务 (commit)(commit),也可以,也可以撤销事务撤销事务 ( (rollback)ro

7、llback)。提交事务(commit)o如果事务成功,则提交。如果事务成功,则提交。o提交就是将事务中所有对数据库的更新提交就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务写回到磁盘上的物理数据库中去,事务正常结束。正常结束。 ocommitcommit语句保证事务的所有修改在数据语句保证事务的所有修改在数据库中都永久有效。库中都永久有效。撤消事务(rollback)o如果事务中出现错误,或者用户决定取消事如果事务中出现错误,或者用户决定取消事务,可撤消(回滚)该事务。务,可撤消(回滚)该事务。o回滚是指在事务运行的过程中发生了某种故回滚是指在事务运行的过程中发生了某种故障,

8、事务不能继续执行,系统将事务中对数障,事务不能继续执行,系统将事务中对数据库的所有已完成的更新操作全部撤销。据库的所有已完成的更新操作全部撤销。即即撤消在该事务中对数据库所做的更新操作,撤消在该事务中对数据库所做的更新操作,使数据库回使数据库回滚滚到事务的起始点。到事务的起始点。orollbackrollback语句通过将数据返回到它在事务开语句通过将数据返回到它在事务开始时所有的状态,来恢复在该事务中所做的始时所有的状态,来恢复在该事务中所做的所有修改。所有修改。9.1.3 事务处理模型事务处理模型 o有两种类型事务:隐式事务,显式事务。有两种类型事务:隐式事务,显式事务。o隐式事务隐式事务

9、:隐式事务是每一条数据操作语句都:隐式事务是每一条数据操作语句都自动地成为一个事务。自动地成为一个事务。o显式事务显式事务:有显式的开始和结束标记的事务。:有显式的开始和结束标记的事务。 nisoiso事务处理模型事务处理模型 nt-sqlt-sql事务处理模型事务处理模型isoiso事务处理模型事务处理模型o明尾暗头:事务的开头是隐含的,结束有明确标记。明尾暗头:事务的开头是隐含的,结束有明确标记。n事务开始:程序的首条事务开始:程序的首条sql语句或事务结束符后的语句或事务结束符后的第一条第一条sql语句。语句。n事务结束事务结束o在程序正常结束处或在程序正常结束处或commit语句处成功

10、终止;语句处成功终止;o在程序出错处或或在程序出错处或或rollback处失败终止。处失败终止。o事务提交方式事务提交方式自动提交:每条自动提交:每条sql语句为一个事务语句为一个事务指定位置提交:在事务结束符或程序正常结束处提交指定位置提交:在事务结束符或程序正常结束处提交 示例示例update 支付表支付表 set 账户总额账户总额 账户总额账户总额 nwhere 账户名账户名 aupdate 支付表支付表 set 账户总额账户总额 账户总额账户总额 nwhere 账户名账户名 bcommit t-sqlt-sql事务处理模型事务处理模型o每个事务都有显式的开始和结束标记。每个事务都有显式

11、的开始和结束标记。o事务的开始标记是:事务的开始标记是:begin transaction | trano事务的结束标记为:事务的结束标记为:ncommit transactiontrannrollback transactiontran示例示例o例如前边的转帐例子用例如前边的转帐例子用transact-sql事务处事务处理模型描述为:理模型描述为:begin transaction update 支付表支付表 set 账户总额账户总额 账户总额账户总额 nwhere 账户名账户名 aupdate 支付表支付表 set 账户总额账户总额 账户总额账户总额 nwhere 账户名账户名 bcomm

12、it sql server提供三种事务类型:提供三种事务类型:o自动提交事务:自动提交事务:每一条单独的每一条单独的sql语句都是一个事务。语句都是一个事务。o显式事务:显式事务:每一个事务均以每一个事务均以begin transaction语句显式开始,以语句显式开始,以commit或或rollback语句显式语句显式结束。结束。o隐式事务:隐式事务:在前一个事务完成时新事务隐式启动,但每在前一个事务完成时新事务隐式启动,但每个事务仍以个事务仍以commit或或rollback语句显式结束。语句显式结束。 osql server设置隐含事务方式的命令是:设置隐含事务方式的命令是: set i

13、mplicit_transactions ono取消隐含事务方式的命令是:取消隐含事务方式的命令是: set implicit_transactions off事务应用举例1o对于单个的对于单个的transact-sql语句,可以使用语句,可以使用go关键字指定一次事务的执行。关键字指定一次事务的执行。 use student go select * from s go事务应用举例2-银行转帐业务处理事务示意银行转帐业务处理事务示意use 银行业务银行业务begin transaction update 储蓄储蓄 set 余额余额=余额余额-1000 where 账号账号=123456789

14、update 储蓄储蓄 set 余额余额=余额余额+1000 where 账号账号= 987654321 if rowcount=0 or error != 0 begin rollback transaction print 发生错误,该操作被取消。发生错误,该操作被取消。 return endcommit transaction z全局变量全局变量rowcount返返回查询结果记录集;回查询结果记录集;error返回当数返回当数据库操作失败时的错据库操作失败时的错误代码。误代码。z左侧代码表示,如左侧代码表示,如果检索出的记录数为果检索出的记录数为0,或者返回的错误代码或者返回的错误代码不

15、为不为0(出错),撤消(出错),撤消事务,并提示用户,事务,并提示用户,否则提交事务。否则提交事务。9.2.1 并发控制概述 9.2.2 并发控制措施9.2.3 封锁协议 封锁粒度 sql server封锁机制9.2.4 活锁和死锁9.2.5 并发调度的可串行性9.2.6 两段锁协议9.2.1 9.2.1 并发控制概述并发控制概述o数据库中的数据是一个共享的资源,因此会有很多用户数据库中的数据是一个共享的资源,因此会有很多用户同时使用数据库中的数据,同时使用数据库中的数据,o在多用户数据库系统中,允许多个用户同时使用的数据在多用户数据库系统中,允许多个用户同时使用的数据库系统,可能同时运行着多

16、个事务,而事务的运行需要库系统,可能同时运行着多个事务,而事务的运行需要时间时间,并且事务中的操作是在一定的数据上进行的。,并且事务中的操作是在一定的数据上进行的。o当系统中同时有当系统中同时有多个事务多个事务在运行时,特别是当这些事务在运行时,特别是当这些事务是是对同一段数据进行操作对同一段数据进行操作时,彼此之间就有可能产生时,彼此之间就有可能产生相相互干扰互干扰的情况。的情况。并发控制概述并发控制概述o不同的多事务执行方式不同的多事务执行方式 n事务串行执行事务串行执行o每个时刻只有一个事务运行,其每个时刻只有一个事务运行,其他事务必须等到这个事务结束以他事务必须等到这个事务结束以后方能

17、运行后方能运行o不能充分利用系统资源,发挥数不能充分利用系统资源,发挥数据库共享资源的特点据库共享资源的特点t1t2t3事务的串行执行方式事务的串行执行方式并发控制概述并发控制概述n交叉并发方式交叉并发方式n在单处理机系统中,事务的并行执行是这些在单处理机系统中,事务的并行执行是这些并行事务的并行操作轮流交叉运行并行事务的并行操作轮流交叉运行o单处理机系统中的并行事务并没有真正地单处理机系统中的并行事务并没有真正地并行运行,但能够减少处理机的空闲时间,并行运行,但能够减少处理机的空闲时间,提高系统的效率提高系统的效率并发控制概述并发控制概述事务的交叉并发执行方式事务的交叉并发执行方式并发控制概

18、述并发控制概述n同时并发方式同时并发方式o多处理机系统中,每个处理机可以运行一多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行务,实现多个事务真正的并行运行并发控制概述并发控制概述o事务并发执行带来的问题事务并发执行带来的问题n会产生多个事务同时存取同一数据的情况会产生多个事务同时存取同一数据的情况 n可能会存取和存储不正确的数据,破坏事可能会存取和存储不正确的数据,破坏事务一致性和数据库的一致性务一致性和数据库的一致性并发控制概述(续)并发控制概述(续)并发操作带来数据的不一致性实例并发操作带来数据的不

19、一致性实例例例1飞机订票系统中的一个活动序列飞机订票系统中的一个活动序列 甲售票点甲售票点(事务事务t1)读出某航班的机票余额读出某航班的机票余额a,设,设a=16; 乙售票点乙售票点(事务事务t2)读出同一航班的机票余额读出同一航班的机票余额a,也为,也为16; 甲售票点卖出一张机票,修改余额甲售票点卖出一张机票,修改余额aa-1,所以,所以a为为15,把,把a写回数据库;写回数据库; 乙售票点也卖出一张机票,修改余额乙售票点也卖出一张机票,修改余额aa-1,所以,所以a为为15,把,把a写回数据库写回数据库 n结果明明卖出两张机票,数据库中机票余额只减少结果明明卖出两张机票,数据库中机票余

20、额只减少1并发控制概述并发控制概述并发控制概述并发控制概述o并发操作所带来的数据不一致情况大致并发操作所带来的数据不一致情况大致可以概括:可以概括:n丢失修改丢失修改n读读“脏脏”数据数据n不可重复读不可重复读1.丢失数据修改丢失数据修改o丢失数据的修改是指两个事务丢失数据的修改是指两个事务t1和和t2读入同读入同一数据并进行修改,一数据并进行修改,t2提交的结果破坏提交的结果破坏t1了了提交的结果,导致提交的结果,导致t1的修改被的修改被t2覆盖掉了。覆盖掉了。 丢失数据修改丢失数据修改o这种情况称为数据库的不一致性,是由并发操作引起的。这种情况称为数据库的不一致性,是由并发操作引起的。o在

21、并发操作情况下,对在并发操作情况下,对t1、t2两个事务的操作序列的调两个事务的操作序列的调度是随机的。度是随机的。o若按上面的调度序列执行,若按上面的调度序列执行, t1事务的修改就被丢失。事务的修改就被丢失。n原因:第原因:第4步中步中t2事务修改事务修改a并写回后覆盖了并写回后覆盖了t1事务事务的修改的修改丢失数据修改丢失数据修改2. 读读“脏脏”数据数据 读读“脏脏”数据是指:数据是指:n事务事务t1修改某一数据,并将其写回磁盘修改某一数据,并将其写回磁盘n事务事务t2读取同一数据后,读取同一数据后,t1由于某种原因被撤由于某种原因被撤销销n这时这时t1已修改过的数据恢复原值,已修改过

22、的数据恢复原值,t2读到的数读到的数据就与数据库中的数据不一致据就与数据库中的数据不一致nt2读到的数据就为读到的数据就为“脏脏”数据,即不正确的数数据,即不正确的数据据 读读“脏脏”数据数据读读“脏脏”数据数据n t1将将b值修改为值修改为200,t2读到读到b为为200n t1由于某种原因撤销,其修改作废,由于某种原因撤销,其修改作废,b恢复原恢复原值值100n 这时这时t2读到的读到的b为为200,与数据库内容不一致,与数据库内容不一致,就是就是“脏脏”数据。数据。 3. 不可重复读不可重复读o不可重复读是指事务不可重复读是指事务t1读取数据后,事务读取数据后,事务t2执行更新操作,使执

23、行更新操作,使t1无法再现前一次读无法再现前一次读取结果。取结果。不可重复读不可重复读o不可重复读包括三种情况:不可重复读包括三种情况:(1)事务事务t1读取某一数据后,读取某一数据后,事务事务t2对其做对其做了修改了修改,当事务,当事务t1再次读该数据时,得到再次读该数据时,得到与前一次不同的值与前一次不同的值 不可重复读不可重复读不可重复读不可重复读nt1读取读取b=100进行运算进行运算nt2读取同一数据读取同一数据b,对其进行修改后将,对其进行修改后将b=200写回数据库。写回数据库。nt1为了对读取值校对重读为了对读取值校对重读b,b已为已为200,与第一次读取值不一致与第一次读取值

24、不一致 不可重复读不可重复读(2)事务事务t1按一定条件从数据库中读取了某些数据记录后,按一定条件从数据库中读取了某些数据记录后,事务事务t2删除了其中部分记录删除了其中部分记录,当,当t1再次按相同条件读取再次按相同条件读取数据时,发现某些记录消失了数据时,发现某些记录消失了 (3)事务事务t1按一定条件从数据库中读取某些数据记录后,按一定条件从数据库中读取某些数据记录后,事事务务t2插入了一些记录插入了一些记录,当,当t1再次按相同条件读取数据时,再次按相同条件读取数据时,发现多了一些记录。发现多了一些记录。o后两种不可重复读有时也称为后两种不可重复读有时也称为幻影幻影现象现象(教材中称为

25、教材中称为“幽灵幽灵”数据。数据。并发控制概述并发控制概述o数据不一致性:由于数据不一致性:由于并发操作破坏了事务的隔并发操作破坏了事务的隔离性离性o并发控制就是要用正确的方式并发控制就是要用正确的方式调度调度并发操作,并发操作,使一个用户事务的执行不受其他事务的干扰,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性从而避免造成数据的不一致性 9.2.2 并发控制措施并发控制措施o商用的商用的dbms一般都采用一般都采用封锁封锁方法方法o封锁就是事务封锁就是事务t在对某个数据对象(例如表、记录等)在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁操作之前,

26、先向系统发出请求,对其加锁o加锁后事务加锁后事务t就对该数据对象有了一定的控制,在事务就对该数据对象有了一定的控制,在事务t释放它的锁之前,其它的事务不能更新此数据对象。释放它的锁之前,其它的事务不能更新此数据对象。并发控制措施并发控制措施o一个事务对某个数据对象加锁后究竟拥有什么一个事务对某个数据对象加锁后究竟拥有什么样的控制由封锁的类型决定。样的控制由封锁的类型决定。o基本封锁类型基本封锁类型n排它锁(排它锁(exclusive locks,简记为,简记为x锁)锁)n共享锁(共享锁(share locks,简记为,简记为s锁)锁)并发控制措施并发控制措施o排它锁排它锁又称为写锁又称为写锁n

27、若事务若事务t对数据对象对数据对象a加上加上x锁,则只允许锁,则只允许t读取和修改读取和修改a,其它任何事务都不能再对,其它任何事务都不能再对a加任何类型的锁,直到加任何类型的锁,直到t释放释放a上的锁上的锁n保证其他事务在保证其他事务在t释放释放a上的锁之前不能再上的锁之前不能再读取和修改读取和修改a并发控制措施并发控制措施o共享锁共享锁又称为读锁又称为读锁n若事务若事务t对数据对象对数据对象a加上加上s锁,则其它事锁,则其它事务只能再对务只能再对a加加s锁,而不能加锁,而不能加x锁,直到锁,直到t释放释放a上的上的s锁锁n保证其他事务可以读保证其他事务可以读a,但在,但在t释放释放a上的上

28、的s锁之前不能对锁之前不能对a做任何修改做任何修改 锁的相容矩阵锁的相容矩阵y=yes,相容的请求,相容的请求n=no,不相容的请求,不相容的请求 t1 t2xs无锁无锁xnnysnyy无锁无锁yyy在锁的相容矩阵中:在锁的相容矩阵中:o最左边一列表示事务最左边一列表示事务t1已经获得的数据对象上的锁的类已经获得的数据对象上的锁的类型。型。o最上面一行表示另一事务最上面一行表示另一事务t2对同一数据对象发出的封锁对同一数据对象发出的封锁请求。请求。ot2的封锁请求能否被满足用矩阵中的的封锁请求能否被满足用矩阵中的y和和n表示表示ny表示事务表示事务t2的封锁要求与的封锁要求与t1已持有的锁相容

29、,封锁已持有的锁相容,封锁请求可以满足请求可以满足nn表示表示t2的封锁请求与的封锁请求与t1已持有的锁冲突,已持有的锁冲突,t2的请的请求被拒绝求被拒绝9.2.3 封锁协议封锁协议 o在运用在运用x x锁和锁和s s锁对数据对象进行加锁时,还需锁对数据对象进行加锁时,还需要约定一些规则,如何时申请要约定一些规则,如何时申请x x锁或锁或s s锁、持锁锁、持锁时间、何时释放锁等。时间、何时释放锁等。o称这些规则为称这些规则为封锁协议封锁协议或或加锁协议加锁协议(locking locking protocelprotocel)。)。o对封锁方式规定不同的规则,就形成了各种不对封锁方式规定不同的

30、规则,就形成了各种不同级别的封锁协议。同级别的封锁协议。o不同级别的封锁协议达到的系统一致性级别不不同级别的封锁协议达到的系统一致性级别不同。同。1. 一级封锁协议一级封锁协议 o对事务要修改的数据加对事务要修改的数据加x x锁,直到事务结锁,直到事务结束(包括正常结束和非正常结束)时才释束(包括正常结束和非正常结束)时才释放。放。o一级封锁协议可以防止丢失修改,并保证一级封锁协议可以防止丢失修改,并保证事务是可恢复的事务是可恢复的 o但不能保证可重复读和不读但不能保证可重复读和不读“脏脏”数据。数据。一级封锁协议示例一级封锁协议示例使用封锁机制解决丢失修改问题使用封锁机制解决丢失修改问题没有

31、丢失修改没有丢失修改n 事务事务t1在读在读a进行修改之前先对进行修改之前先对a加加x锁锁n 当当t2再请求对再请求对a加加x锁时被拒绝锁时被拒绝n t2只能等待只能等待t1释放释放a上的锁后上的锁后t2获得对获得对a的的x锁锁n 这时这时t2读到的读到的a已经是已经是t1更新过的值更新过的值15n t2按此新的按此新的a值进行运算,并将结果值值进行运算,并将结果值a=11送回送回到磁盘。避免了丢失到磁盘。避免了丢失t1的更新的更新15。2. 二级封锁协议二级封锁协议o在满足一级封锁协议的情况下,事务对在满足一级封锁协议的情况下,事务对要读取的数据加要读取的数据加s s锁,读完后即释放锁,读完

32、后即释放s s锁。锁。o除了可以防止丢失修改外,还可以防止除了可以防止丢失修改外,还可以防止读读“脏脏”数据。数据。o但不能保证可重复读数据。但不能保证可重复读数据。 二级封锁协议示例二级封锁协议示例使用封锁机制解决读使用封锁机制解决读“脏脏”数据问题数据问题不读不读“脏脏”数据数据 n 事务事务t1在对在对c进行修改之前,先对进行修改之前,先对c加加x锁,修改其值锁,修改其值后写回磁盘后写回磁盘n t2请求在请求在c上加上加s锁,因锁,因t1已在已在c上加了上加了x锁,锁,t2只能只能等待等待n t1因某种原因被撤销,因某种原因被撤销,c恢复为原值恢复为原值50n t1释放释放c上的上的x锁

33、后锁后t2获得获得c上的上的s锁,读锁,读c=50。避免。避免了了t2读读“脏脏”数据数据1003. 三级封锁协议三级封锁协议o在满足一级封锁协议的情况下,事务对在满足一级封锁协议的情况下,事务对要读取的数据加要读取的数据加s s锁,并直到事务结束锁,并直到事务结束才释放。才释放。o除了可以防止丢失修改和不读除了可以防止丢失修改和不读“脏脏”数数据之外,还进一步防止了不可重复读。据之外,还进一步防止了不可重复读。 三级封锁协议示例三级封锁协议示例使用封锁机制解决不可重复读问题使用封锁机制解决不可重复读问题可重复读可重复读n 事务事务t1在读在读a,b之前,先对之前,先对a,b加加s锁锁n 其他

34、事务只能再对其他事务只能再对a,b加加s锁,而不能加锁,而不能加x锁,即其他锁,即其他事务只能读事务只能读a,b,而不能修改,而不能修改n 当当t2为修改为修改b而申请对而申请对b的的x锁时被拒绝只能等待锁时被拒绝只能等待t1释释放放b上的锁上的锁n t1为验算再读为验算再读a,b,这时读出的,这时读出的b仍是仍是100,求和结,求和结果仍为果仍为150,即可重复读,即可重复读n t1结束才释放结束才释放a,b上的上的s锁。锁。t2才获得对才获得对b的的x锁锁 封锁粒度(了解)封锁粒度(了解)o封锁对象的大小称为封锁粒度封锁对象的大小称为封锁粒度(granularity) o封锁的对象:逻辑单

35、元,物理单元封锁的对象:逻辑单元,物理单元 例:在关系数据库中,封锁对象:例:在关系数据库中,封锁对象:n逻辑单元逻辑单元: 属性值、属性值集合、元组、关系、索引属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库等项、整个索引、整个数据库等n物理单元:页(数据页或索引页)、物理记录等物理单元:页(数据页或索引页)、物理记录等选择封锁粒度原则选择封锁粒度原则o封锁粒度与系统的并发度和并发控制的开销密封锁粒度与系统的并发度和并发控制的开销密切相关。切相关。n封锁的粒度越大,数据库所能够封锁的数据单元封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度就越小,系统开销也越小;就越少,并

36、发度就越小,系统开销也越小;n封锁的粒度越小,并发度较高,但系统开销也就封锁的粒度越小,并发度较高,但系统开销也就越大越大选择封锁粒度的原则选择封锁粒度的原则例例o若封锁粒度是数据页,事务若封锁粒度是数据页,事务t1需要修改元组需要修改元组l1,则,则t1必须对包含必须对包含l1的整个数据页的整个数据页a加锁。如果加锁。如果t1对对a加锁后加锁后事务事务t2要修改要修改a中元组中元组l2,则,则t2被迫等待,直到被迫等待,直到t1释释放放a。o如果封锁粒度是元组,则如果封锁粒度是元组,则t1和和t2可以同时对可以同时对l1和和l2加加锁,不需要互相等待,提高了系统的并行度。锁,不需要互相等待,

37、提高了系统的并行度。o又如,事务又如,事务t需要读取整个表,若封锁粒度是元组,需要读取整个表,若封锁粒度是元组,t必必须对表中的每一个元组加锁,开销极大须对表中的每一个元组加锁,开销极大 选择封锁粒度的原则选择封锁粒度的原则o多粒度封锁多粒度封锁 在一个系统中同时支持多种封锁粒度供不同的事务选择在一个系统中同时支持多种封锁粒度供不同的事务选择o选择封锁粒度选择封锁粒度 同时考虑封锁开销和并发度两个因素,适当选择封锁粒同时考虑封锁开销和并发度两个因素,适当选择封锁粒度度n需要处理多个关系的大量元组的用户事务:以数据库需要处理多个关系的大量元组的用户事务:以数据库为封锁单位为封锁单位n需要处理大量

38、元组的用户事务:以关系为封锁单元需要处理大量元组的用户事务:以关系为封锁单元n只处理少量元组的用户事务:以元组为封锁单位只处理少量元组的用户事务:以元组为封锁单位sql server中与封锁有关的命令中与封锁有关的命令 osql server使用动态锁定策略确定最经济的锁,自使用动态锁定策略确定最经济的锁,自动调整锁定,应用程序开发人员可以不作选择。动调整锁定,应用程序开发人员可以不作选择。o如果需要,也可在应用程序中自定义锁来设计更有效如果需要,也可在应用程序中自定义锁来设计更有效的应用程序。的应用程序。osql server的封锁操作是在相关语句的的封锁操作是在相关语句的“with ()”

39、子句中完成的,该短语可以在子句中完成的,该短语可以在select、insert、update和和delete等语句等语句中指定表级锁定的方式和范围。中指定表级锁定的方式和范围。sql server中与封锁有关的命令中与封锁有关的命令o常用的封锁关键词有:常用的封锁关键词有:ntablock:对表施行共享封锁,在读完数据后立刻对表施行共享封锁,在读完数据后立刻释放封锁,此类封锁可以避免读释放封锁,此类封锁可以避免读“脏脏”数据,但不具数据,但不具有可重复读的特性。有可重复读的特性。 nholdlock:与:与tablock一起使用,可将共享锁保一起使用,可将共享锁保留到事务完成,而不是在读完数据

40、后立即释放锁,这留到事务完成,而不是在读完数据后立即释放锁,这样可以保证数据的可重复独特性。样可以保证数据的可重复独特性。 nnolock:不进行封锁,此关键词仅应用于:不进行封锁,此关键词仅应用于select语句,这样可能会读取未提交事务的数据,即有可能语句,这样可能会读取未提交事务的数据,即有可能发生发生“脏脏”读。读。 ntablockx:对表实施独占封锁。:对表实施独占封锁。 nupdlock:对表中的指定元组实施更新封锁;这时:对表中的指定元组实施更新封锁;这时其他事务可以对同一表中的其他元组也实施更新封锁,其他事务可以对同一表中的其他元组也实施更新封锁,但是不允许对表实施共享封锁和

41、独占封锁。但是不允许对表实施共享封锁和独占封锁。 sql server中与封锁有关的命令中与封锁有关的命令declare d datetime, t char(6), s char(2), n char(10)begin transactionselect n=座位号座位号 from r with (updlock)where 日期日期 = d and 车次车次 = t and 座别座别 = s and 状状态态 is nullif update r set 状态状态 = y where 座位号座位号 = n and 日期日期 = d and 车次车次 = t and 座别座别 = scomm

42、it transactionelserollback transaction9.2.4 活锁和死锁活锁和死锁o封锁技术可以有效地解决并行操作的一致封锁技术可以有效地解决并行操作的一致性问题,但也带来一些新的问题性问题,但也带来一些新的问题n活锁活锁n死锁死锁1.活锁活锁o事务事务t1封锁了数据封锁了数据ro事务事务t2又请求封锁又请求封锁r,于是,于是t2等待。等待。ot3也请求封锁也请求封锁r,当,当t1释放了释放了r上的封锁之后系上的封锁之后系统首先批准了统首先批准了t3的请求,的请求,t2仍然等待。仍然等待。ot4又请求封锁又请求封锁r,当,当t3释放了释放了r上的封锁之后系上的封锁之后

43、系统又批准了统又批准了t4的请求的请求ot2有可能永远等待,这就是有可能永远等待,这就是活锁活锁的情形的情形 活锁(续)活锁(续)活锁(续)活锁(续)o避免活锁:避免活锁:采用先来先服务的策略采用先来先服务的策略n当多个事务请求封锁同一数据对象时当多个事务请求封锁同一数据对象时n按请求封锁的先后次序对这些事务排队按请求封锁的先后次序对这些事务排队n该数据对象上的锁一旦释放,首先批准申该数据对象上的锁一旦释放,首先批准申请队列中第一个事务获得锁请队列中第一个事务获得锁2.死锁死锁o事务事务t1封锁了数据封锁了数据r1ot2封锁了数据封锁了数据r2ot1又请求封锁又请求封锁r2,因,因t2已封锁了

44、已封锁了r2,于是,于是t1等待等待t2释放释放r2上的锁上的锁o接着接着t2又申请封锁又申请封锁r1,因,因t1已封锁了已封锁了r1,t2也只能等待也只能等待t1释放释放r1上的锁上的锁o这样这样t1在等待在等待t2,而,而t2又在等待又在等待t1,t1和和t2两个事务永远不能结束,形成两个事务永远不能结束,形成死锁死锁 死锁(续)死锁(续)t1t2lock r1lock r2lock r2.等待等待lock r1等待等待等待等待死 锁解决死锁的方法解决死锁的方法o两类方法两类方法n预防死锁预防死锁n死锁的诊断与解除死锁的诊断与解除3.预防死锁预防死锁o产生死锁的原因是两个或多个事务都已封锁

45、了产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。封锁的数据对象加锁,从而出现死等待。o预防死锁的发生就是要破坏产生死锁的条件预防死锁的发生就是要破坏产生死锁的条件死锁的预防(续)死锁的预防(续)预防死锁的方法预防死锁的方法o 一次封锁法一次封锁法o 顺序封锁法顺序封锁法一次封锁法一次封锁法o要求每个事务必须一次将所有要使用的数据要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行全部加锁,否则就不能继续执行o存在的问题存在的问题n降低系统并发度降低系统并发度n难于事先精确

46、确定封锁对象难于事先精确确定封锁对象顺序封锁法顺序封锁法o顺序封锁法是预先对数据对象规定一个封锁顺顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。序,所有事务都按这个顺序实行封锁。o顺序封锁法存在的问题顺序封锁法存在的问题n维护成本维护成本 数据库系统中封锁的数据对象极多,并且在数据库系统中封锁的数据对象极多,并且在不断地变化。不断地变化。n难以实现:很难事先确定每一个事务要封锁难以实现:很难事先确定每一个事务要封锁哪些对象哪些对象 死锁的预防(续)死锁的预防(续)o结论结论n在操作系统中广为采用的预防死锁的策略在操作系统中广为采用的预防死锁的策略并不很适合数据库的特

47、点并不很适合数据库的特点ndbms在解决死锁的问题上更普遍采用的在解决死锁的问题上更普遍采用的是诊断并解除死锁的方法是诊断并解除死锁的方法4. 死锁的诊断与解除死锁的诊断与解除o死锁的诊断死锁的诊断n超时法超时法n事务等待图法事务等待图法 (1) 超时法超时法o如果一个事务的等待时间超过了规定的时限,如果一个事务的等待时间超过了规定的时限,就认为发生了死锁就认为发生了死锁o优点:实现简单优点:实现简单o缺点缺点n有可能误判死锁有可能误判死锁n时限若设置得太长,死锁发生后不能及时时限若设置得太长,死锁发生后不能及时发现发现(2)等待图法等待图法o用事务等待图动态反映所有事务的等待情况用事务等待图

48、动态反映所有事务的等待情况n事务等待图是一个有向图事务等待图是一个有向图g=(t,u)nt为结点的集合,每个结点表示正运行的事务为结点的集合,每个结点表示正运行的事务nu为边的集合,每条边表示事务等待的情况为边的集合,每条边表示事务等待的情况n若若t1等待等待t2,则,则t1,t2之间划一条有向边,从之间划一条有向边,从t1指向指向t2等待图法(续)等待图法(续) 事务等待图n 图图(a)中,事务中,事务t1等待等待t2,t2等待等待t1,产生了死锁,产生了死锁n 图图(b)中,事务中,事务t1等待等待t2,t2等待等待t3,t3等待等待t4,t4又等待又等待t1,产生了死锁,产生了死锁 n

49、图图(b)中,事务中,事务t3可能还等待可能还等待t2,在大回路中又有小的回路,在大回路中又有小的回路 等待图法(续)等待图法(续)o并发控制子系统周期性地(比如每隔数秒)并发控制子系统周期性地(比如每隔数秒)生成事务等待图,检测事务。如果发现图生成事务等待图,检测事务。如果发现图中存在回路,则表示系统中出现了死锁。中存在回路,则表示系统中出现了死锁。死锁的诊断与解除(续)死锁的诊断与解除(续)o解除死锁解除死锁n选择一个处理死锁代价最小的事务,将选择一个处理死锁代价最小的事务,将其撤消其撤消n释放此事务持有的所有的锁,使其它事释放此事务持有的所有的锁,使其它事务能继续运行下去务能继续运行下去

50、9.2.5 并发调度的可串行性并发调度的可串行性odbms对并发事务不同的调度可能会产对并发事务不同的调度可能会产生不同的结果生不同的结果o什么样的调度是正确的?什么样的调度是正确的?9.2.5 并发调度的可串行性并发调度的可串行性o可串行化调度可串行化调度n多个事务的并发执行是正确的,当且仅当多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务其结果与按某一次序串行地执行这些事务时的结果相同时的结果相同o事务的可串行性是并发事务正确调度的准则事务的可串行性是并发事务正确调度的准则o一个给定的并发调度,当且仅当它是可串行一个给定的并发调度,当且仅当它是可串行化的,才认为是正

51、确调度。化的,才认为是正确调度。 可串行化调度可串行化调度例例现在有两个事务,分别包含下列操作:现在有两个事务,分别包含下列操作:n事务事务t1:读:读b;a=b+1;写回;写回an事务事务t2:读:读a;b=a+1;写回;写回b现给出对这两个事务不同的调度策略现给出对这两个事务不同的调度策略 o记号记号nr(x):读数据读数据xnw(x):写数据写数据x串行化调度串行化调度, ,正确的调度正确的调度t1t2slock by=r(b)=2unlock bxlock aa=y+1=3w(a)unlock aslock ax=r(a)=3unlock axlock bb=x+1=4w(b)unlo

52、ck bn 假设假设a、b的初值均为的初值均为2。n 按按t1t2次序执行结果次序执行结果为为a=3,b=4 n 串行调度策略串行调度策略,正确的调度正确的调度 串行调度串行调度(a)串行化调度串行化调度, ,正确的调度正确的调度t1t2slock ax=r(a)=2unlock axlock bb=x+1=3w(b)unlock bslock by=r(b)=3unlock bxlock aa=y+1=4w(a)unlock a串行调度串行调度(b)n 假设假设a、b的初值均为的初值均为2。n t2t1次序执行结果为次序执行结果为b=3,a=4 n 串行调度策略串行调度策略,正确的调度正确的

53、调度 不可串行化调度,错误的调度不可串行化调度,错误的调度t1t2slock by=r(b)=2slock ax=r(a)=2unlock bunlock axlock aa=y+1=3w(a)xlock bb=x+1=3w(b)unlock aunlock b不可串行化的调度不可串行化的调度 n 执行结果与执行结果与(a)、(b)的结的结果都不同果都不同n 是错误的调度是错误的调度 可串行化调度,正确的调度可串行化调度,正确的调度t1t2slock by=r(b)=2unlock bxlock aslock aa=y+1=3等待w(a)等待unlock a等待x=r(a)=3unlock axlock bb=x+1=4w(b)unlock b可串行化的调度可串行化的调度 n 执行结果与串行调度执行结果与串行调度(a)的执行结果相同的执行结果相同n 是正确的调度是正确的调度 9.2.6 两段锁协议两段锁协议 o两段锁协议是实现可串行化调度的两段锁协议是实现可串行化调度的充分条件充分条件。o可以将每个事务分成两个时期:可以将每个事务分成两个时期:申请封锁期申请封锁期和和释放封锁期释放封锁期,申请期申请要进行的封锁,释放,申请期申请要进行的封锁,释放期释放所占有的封锁。期释放所占有的封锁。o在申请期不允许释放任何锁

温馨提示

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

评论

0/150

提交评论