系统实现技术课件_第1页
系统实现技术课件_第2页
系统实现技术课件_第3页
系统实现技术课件_第4页
系统实现技术课件_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

1、第八章第八章 系统实现技术系统实现技术 事务和锁事务和锁 本章重要概念本章重要概念 (1)事务的定义,COMMIT和ROLLBACK的语义,事务的 ACID性质,事务的状态变迁图。 (2)存储器类型,稳定存储器的实现,数据传送过程。 (3)恢复的定义、基本原则和实现方法,故障的类型,检查 点技术,REDO和UNDO操作,运行记录优先原则。 (4)并发操作带来的三个问题,X锁、S锁、使用X锁和S锁 的操作,封锁协议,活锁、饿死和死锁,并发调度、串行调 度、并发调度的可串行化,SQL中事务的存取模式和隔离级 别,基于时标的并发控制。 第第8章章 系统实现技术系统实现技术 8.1 事务 8.2 数据

2、库的恢复 8.3 数据库的并发控制 8.1 8.1 事务事务 8.1.1 事务的定义 8.1.2 事务的ACID性质 为什么需要事务为什么需要事务8.1-18.1-1 例如,银行转帐问题:例如,银行转帐问题: 假定资金从帐户假定资金从帐户A A转到帐户转到帐户B B,至少需要两步:,至少需要两步: 帐户帐户A A的资金减少的资金减少 然后帐户然后帐户B B的资金相应增加的资金相应增加 帐户帐户A帐户帐户B 为什么需要事务为什么需要事务8.1-28.1-2 CREATE TABLE bank ( customerName CHAR(10), -顾客姓名 currentMoney MONEY -当

3、前余额 ) GO ALTER TABLE bank ADD CONSTRAINT CK_currentMoney CHECK(currentMoney=1) GO INSERT INTO bank(customerName,currentMoney) VALUES(张三,1000) INSERT INTO bank(customerName,currentMoney) VALUES(李四,1) 创建帐户表,存放用户的帐户信息 添加约束:根据银行规定,帐户 余额不能少于1元,否则视为销户 张三开户,开户金额为1000元 ;李四开户,开户金额1元 为什么需要事务为什么需要事务8.1-38.1-3

4、目前两个帐户的余额总和为:目前两个帐户的余额总和为:1000+1=1001元元 为什么需要事务为什么需要事务8.1-48.1-4 模拟实现转帐 : 从张三的帐户转帐从张三的帐户转帐1000元到李四的帐户元到李四的帐户 /*-转帐测试:张三转账1000元给李四-*/ -我们可能会这样这样编写语句 -张三的帐户少1000元,李四的帐户多1000元 UPDATE bank SET currentMoney=currentMoney-1000 WHERE customerName=张三 UPDATE bank SET currentMoney=currentMoney+1000 WHERE custo

5、merName=李四 GO -再次查看转帐后的结果。 SELECT * FROM bank GO 请问: 执行转帐语句后,张三、李四的 帐户余额为多少? l张三的帐户没有减少 l但李四的帐户却多了1000元 l100010012001元 总额多出了1000元! 为什么需要事务为什么需要事务8.1-58.1-5 -张三的帐户减少1000元,李四的帐户增加1000元 UPDATE bank SET currentMoney=currentMoney-1000 WHERE customerName=张三 UPDATE bank SET currentMoney=currentMoney+1000 W

6、HERE customerName=李四 GO 错误原因分析:错误原因分析: UPDATE语句违反约束: 余额=1元 执行失败,所以张三还是执行失败,所以张三还是1000元元 继续往下执行继续往下执行:执行成功,所以李四变为:执行成功,所以李四变为1001元元 如何解决呢?使用如何解决呢?使用事务事务 8.1.1 事务的定义事务的定义(1)(1) 定义定义8.1 8.1 事务(事务(transactiontransaction)是构成单一逻辑工作单元的)是构成单一逻辑工作单元的 操作集合,要么完整地执行,要么完全不执行。不论发生操作集合,要么完整地执行,要么完全不执行。不论发生 何种情况,何种

7、情况,DBSDBS必须保证事务能正确、完整地执行。必须保证事务能正确、完整地执行。 在程序中,事务以在程序中,事务以BEGIN TRANSACTIONBEGIN TRANSACTION语句开始,语句开始, 以以COMMITCOMMIT语句或语句或ROLLBACKROLLBACK语句结束。语句结束。 COMMITCOMMIT语句表示事务执行成功地结束(提交),此语句表示事务执行成功地结束(提交),此 时告诉系统,数据库要进入一个新的正确状态,该事务对时告诉系统,数据库要进入一个新的正确状态,该事务对 数据库的所有更新都已交付实施(写入磁盘)。数据库的所有更新都已交付实施(写入磁盘)。 ROLLB

8、ACKROLLBACK语句表示事务执行不成功地结束(应该语句表示事务执行不成功地结束(应该 “回退回退”),此时告诉系统,已发生错误,数据库可能处),此时告诉系统,已发生错误,数据库可能处 在不正确的状态,该事务对数据库的所有更新必须被撤消,在不正确的状态,该事务对数据库的所有更新必须被撤消, 数据库应恢复该事务到初始状态。数据库应恢复该事务到初始状态。 用户定义的一个对数据库读写操作序列用户定义的一个对数据库读写操作序列 一个一个不可分割不可分割的工作单位的工作单位 数据库恢复和并发控制的基本单位数据库恢复和并发控制的基本单位 数据库系统中通常有多个事务并行运行数据库系统中通常有多个事务并行

9、运行 v事务和程序比较事务和程序比较 在关系数据库中,一个事务可以是一条或多在关系数据库中,一个事务可以是一条或多 条条SQL语句语句,也可以包含一个或多个程序。也可以包含一个或多个程序。 一个程序通常包含多个事务一个程序通常包含多个事务 转帐过程就是一个事务。 它需要两条UPDATE语句来完成,这两条语句是一个整体, 如果其中任一条出现错误,则整个转帐业务也应取消,两 个帐户中的余额应恢复到原来的数据,从而确保转帐前和 转帐后的余额不变,即都是1001元。 8.1.1 事务的定义事务的定义(2)(2) 8.1.1 事务的定义事务的定义(3)(3) 例例8.1 8.1 设银行数据库设银行数据库

10、 中有一转账事务中有一转账事务T T,从,从 账号账号A A转一笔款子(转一笔款子($50$50) 到账号到账号B B,其操作如下:,其操作如下: T T:readread(A A);); A:=AA:=A5050; writewrite(A A);); readread(B B);); B:=B + 50B:=B + 50; writewrite(B B). . n组织成组织成如下如下事务事务: T T: BEGIN RANSACTIONBEGIN RANSACTION; readread(A A);); A:=A-50A:=A-50; writewrite(A A);); if(Aif(A

11、0)ROLLBACK0)ROLLBACK; else readelse read(B B);); B:=B+50B:=B+50; writewrite(B B);); COMMITCOMMIT; 8.1.1 事务的定义事务的定义(4)(4) 对数据库的访问是建立在读和写两个操作的基础上的:对数据库的访问是建立在读和写两个操作的基础上的: ureadread(X X):把数据):把数据X X,从磁盘的数据库中读到内,从磁盘的数据库中读到内 存的缓冲区中。存的缓冲区中。 uwritewrite(X X):把数据):把数据X X,从内存缓冲区中写回磁盘,从内存缓冲区中写回磁盘 的数据库。的数据库。

12、在系统运行时,在系统运行时,writewrite操作未必导致数据立即写操作未必导致数据立即写 回磁盘,很可能先暂存在内存缓冲区中,稍后再写回回磁盘,很可能先暂存在内存缓冲区中,稍后再写回 磁盘。这件事情是磁盘。这件事情是DBMSDBMS实现时必须注意的问题。实现时必须注意的问题。 8.1.2 事务的事务的ACIDACID性质性质 性质: v 原子性原子性(Atomicity): 事务是一个不可分割的工作单元,事务中的操作要么都做,要事务是一个不可分割的工作单元,事务中的操作要么都做,要 么都不做么都不做 (All or None)(All or None) v 一致性一致性(Consisten

13、cy): 即数据不会应事务的执行而遭受破坏。即数据不会应事务的执行而遭受破坏。事务执行的结果必须使事务执行的结果必须使 数据库从数据库从一个一致性状态一个一致性状态变到变到另一个一致性状态。另一个一致性状态。与原子性与原子性 密切相关。密切相关。 v 隔离性隔离性(Isolation): 在多个事务并发执行时,系统应保证与这些事务先后单独执行在多个事务并发执行时,系统应保证与这些事务先后单独执行 时的结果一样。时的结果一样。 v 持久性持久性(Durability): 一个事务一旦完成全部操作后,它对数据库的所有更新应永久一个事务一旦完成全部操作后,它对数据库的所有更新应永久 地反映在数据库中

14、。地反映在数据库中。 8.2 8.2 数据库的恢复数据库的恢复 8.2.1 8.2.1 存储器结构存储器结构 8.2.2 8.2.2 恢复的基本原则和实现方法恢复的基本原则和实现方法 8.2.3 8.2.3 故障类型和恢复方法故障类型和恢复方法 8.2.4 8.2.4 检查点技术检查点技术 8.2.5 SQL8.2.5 SQL对事务的支持对事务的支持 8.2.1 8.2.1 存储器结构存储器结构(1)(1) 1.1.存储器类型存储器类型 p易失性存储器(易失性存储器(volatile storagevolatile storage) 内存、内存、cachecache存储器存储器 p非易失性存储

15、器(非易失性存储器(nonvolatile storagenonvolatile storage) 磁盘和磁带磁盘和磁带 p稳定存储器(稳定存储器(stable storagestable storage) 这是一个理论上的概念。存储在稳定存储器中的信息是决不会这是一个理论上的概念。存储在稳定存储器中的信息是决不会 丢失的。丢失的。 2.2.稳定存储器的实现稳定存储器的实现 p数据备份数据备份 p数据银行数据银行 8.2.1 8.2.1 存储器结构存储器结构(2)(2) 3. 数据访问数据访问 p块、物理块和缓冲块、物理块和缓冲块块 p块块的操作的操作 inputinput(A A):把物理块

16、:把物理块A A的的 内容传送到内存的缓冲内容传送到内存的缓冲 块中。块中。 OutputOutput(B B):把缓冲块:把缓冲块B B 的内容传送到磁盘中恰的内容传送到磁盘中恰 当的物理块中当的物理块中 B 内存内存 A B 磁盘磁盘 input(A) output(B) 图图8.2 块操作块操作 8.2.1 8.2.1 存储器结构存储器结构(3)(3) xi write(X) 包含包含x的块的块 Bx存在,存在, read(X)事务事务 系统系统 开开 始始 请求请求 read(X) 事务工作区事务工作区分配分配 X 磁盘缓冲区磁盘缓冲区 扫描内存扫描内存 磁盘磁盘 包含包含x的块的块

17、Bx存在,存在, input(B) 8.2.1 8.2.1 存储器结构存储器结构(4)(4) 银行转账系统银行转账系统 A=2000 B=1000 事务事务 A=A-100 B=B+100 output(A)output(A) output(Boutput(B 假设没有事假设没有事 务的原子性,务的原子性, 那么重新启那么重新启 动事务时,动事务时, 要么要么A A因为因为 再执行一遍再执行一遍 而为而为18001800, 要么要么B B因从因从 未执行而保未执行而保 持原值。持原值。 4. 恢复和原子性的联系恢复和原子性的联系 8.2.28.2.2恢复的基本原则和实现方法恢复的基本原则和实现

18、方法 u基本原则基本原则 :“冗余冗余”,即数据库重复存储。,即数据库重复存储。 u具体实现方法具体实现方法 平时做好两件事:转储和建立日志平时做好两件事:转储和建立日志 周期地(比如一天一次)对整个数据库进行拷贝,转储周期地(比如一天一次)对整个数据库进行拷贝,转储 到另一个磁盘或磁带一类存储介质中。到另一个磁盘或磁带一类存储介质中。 建立日志数据库。记录事务的开始、结束及数据每一次建立日志数据库。记录事务的开始、结束及数据每一次 插入、删除和修改前后的值,并写到插入、删除和修改前后的值,并写到“日志日志”库中。库中。 一旦发生数据库故障,分两种情况进行处理一旦发生数据库故障,分两种情况进行

19、处理 如果数据库已被破坏,则装入如果数据库已被破坏,则装入lastlast数据库备份,再利用数据库备份,再利用 日志库将这两个数据库状态之间的所有更新重新做一遍。日志库将这两个数据库状态之间的所有更新重新做一遍。 如果数据库未被破坏,但某些数据不可靠,则撤消所有如果数据库未被破坏,但某些数据不可靠,则撤消所有 不可靠的修改,把数据库恢复到正确的状态。不可靠的修改,把数据库恢复到正确的状态。 8.2.3 8.2.3 故障类型和恢复方法故障类型和恢复方法(1)(1) 1.1.事务故障事务故障 可以预期的事务故障,如存款余额透支等可以预期的事务故障,如存款余额透支等 非预期事务故障,如运算溢出、数据

20、错误、死锁等非预期事务故障,如运算溢出、数据错误、死锁等 2.2.系统故障:硬件故障、软件错误或掉电等系统故障:硬件故障、软件错误或掉电等, ,重重 新启动时,具体处理分两种情况考虑。新启动时,具体处理分两种情况考虑。 对未完成事务作对未完成事务作UNDOUNDO处理;处理; 对已提交事务但更新还留在缓冲区的事务进行对已提交事务但更新还留在缓冲区的事务进行REDOREDO 处理。处理。 8.2.3 8.2.3 故障类型和恢复方法故障类型和恢复方法(2)(2) 3 3介质故障介质故障 在发生介质故障和遭受病毒破坏时,磁盘上在发生介质故障和遭受病毒破坏时,磁盘上 的物理数据库遭到毁灭性破坏。此时恢

21、复的的物理数据库遭到毁灭性破坏。此时恢复的 过程如下:过程如下: p重装最近转储的后备副本到新的磁盘,使数据重装最近转储的后备副本到新的磁盘,使数据 库恢复到转储时的一致状态。库恢复到转储时的一致状态。 p在日志中找出最近转储以后所有已提交的事务。在日志中找出最近转储以后所有已提交的事务。 p对这些已提交的事务进行对这些已提交的事务进行REDOREDO处理,将数据库处理,将数据库 恢复到故障前某一时刻的一致状态。恢复到故障前某一时刻的一致状态。 在实际中,系统故障通常称为软故障在实际中,系统故障通常称为软故障(Soft (Soft Crash)Crash),介质故障通常称为硬故障,介质故障通常

22、称为硬故障(Hard (Hard Crash)Crash)。 8.2.4 8.2.4 检查点技术检查点技术(1)(1) 1 1检查点方法检查点方法 在在DBSDBS运行时,运行时, DBMSDBMS定时设置检查定时设置检查 点。在检查点时刻点。在检查点时刻 才真正做到把对才真正做到把对DBDB 的修改写到磁盘,的修改写到磁盘, 并在日志文件写入并在日志文件写入 一条检查点记录一条检查点记录( (以以 便恢复时使用便恢复时使用) )。当。当 DBDB需要恢复时,只需要恢复时,只 有那些在检查点后有那些在检查点后 面的事务需要恢复。面的事务需要恢复。 事务事务T1T1不必恢复;不必恢复; 事务事务

23、T2T2和事务和事务T4T4必须重做必须重做(REDO)(REDO); 事务事务T3T3和事务和事务T5T5必须撤消必须撤消(UNDO)(UNDO)。 事务事务 检查点检查点 故障点故障点 t 检查点检查点 T1T1 T3T3 T2T2 T5T5 T4T4 8.2.4 8.2.4 检查点技术检查点技术(2)(2) 2 2检查点方法的恢复算法:分成两步。检查点方法的恢复算法:分成两步。 (1 1)根据日志文件建立事务)根据日志文件建立事务重做队列重做队列和事务和事务撤销队撤销队 列列。此时,从头扫描日志文件(正向扫描)。此时,从头扫描日志文件(正向扫描)。 (2 2)对)对重做队列重做队列中的事

24、务进行中的事务进行REDOREDO处理,对处理,对撤销队撤销队 列列中的事务进行中的事务进行UNDOUNDO处理。处理。 p进行进行REDOREDO处理的方法是:正向扫描日志文件,根处理的方法是:正向扫描日志文件,根 据重做队列的记录对每一个重做事务重新实施对数据重做队列的记录对每一个重做事务重新实施对数 据库的更新操作。据库的更新操作。 p进行进行UNDOUNDO处理的方法是:反向扫描日志文件,根处理的方法是:反向扫描日志文件,根 据撤销队列的记录对每一个撤销事务的更新操作执据撤销队列的记录对每一个撤销事务的更新操作执 行逆操作。行逆操作。 8.2.5 SQL8.2.5 SQL对事务的支持对

25、事务的支持 无无begin transaction Commit Rollback 8.3 数据库的并发控制数据库的并发控制 8.3.1 8.3.1 并发操作带来的三个问题并发操作带来的三个问题 8.3.2 8.3.2 封锁技术封锁技术 8.3.3 8.3.3 封锁带来的问题封锁带来的问题 8.3.4 8.3.4 并发操作的调度并发操作的调度 8.3.5 SQL8.3.5 SQL对事务处理的支持对事务处理的支持 8.3.1并发操作带来的三个问题并发操作带来的三个问题(1)(1) 图图8.5 8.5 在时间在时间t8t8丢失了事务丢失了事务T1T1的更新的更新 (FINDFIND表示从表示从DB

26、DB中读值,中读值,UPDUPD表示把值写回到表示把值写回到DBDB) 1 1丢失更新问题(例丢失更新问题(例8.28.2) 时间 更新事务T1数据库中A的值更新事务T2 t0 100 t1FIND A t2 FIND A t3A:=A-30 t4 A:=A*2 t5UPD A t6 80UPD A t8 200 8.3.1并发操作带来的三个问题并发操作带来的三个问题(2)(2) 图图8.6 8.6 事务事务T2T2在时间在时间t4t4读了未提交的读了未提交的A A值(值(8080) 2 2读脏数据问题(例读脏数据问题(例8.38.3,用户读了,用户读了“脏数据脏数据”, 但没有破坏数据库的完

27、整性)但没有破坏数据库的完整性) 时间更新事务T1 数据库中A的值 读事务T2 t0 100 t1FIND A t2A:=A-30 t3UPD A t4 80FIND A t5 *ROLLBAC K* t6 100 8.3.1并发操作带来的三个问题并发操作带来的三个问题(3)(3) 图图8.8 8.8 事务事务T2T2在时间在时间t4t4读了未提交的读了未提交的A A值,并在时间值,并在时间 t8t8丢失了自己的更新丢失了自己的更新 2 2读脏数据问题(读脏数据问题(例例8.48.4,用户读了用户读了“脏数据脏数据”,引起,引起 自自身的更新操作被丢失,破坏了数据库的完整性)身的更新操作被丢失

28、,破坏了数据库的完整性) 时间 更新事务T1 数据库中A的值 更新事务T2 t0 100 t1FIND A t2A:=A-30 t3UPD A t4 80FIND A t5 A:=A*2 t6 UPD A t8 140 t8 *ROLLBAC K* t9 100 8.3.1并发操作带来的三个问题并发操作带来的三个问题(4)(4) 图图8.8 8.8 事务事务T1T1两次读取两次读取A A的值,的值, 却得到了不同的结果却得到了不同的结果 3.3.不可重复读问题不可重复读问题(例(例8.58.5) 时间 读事务T1 数据库中A的值 更新事务T2 t0 100 t1FIND A t2 XFIND

29、A t3 A:=A*2 t4 UPD A t5 200COMMIT t6FIND A 8.3.1并发操作带来的三个问题并发操作带来的三个问题(5)(5) 时间时间 更新事务更新事务T1T1数据库中数据库中A A值值更新事务更新事务T2T2 t0t0 100100 t1t1FIND AFIND A t2t2 FIND AFIND A t3t3A:=A-30A:=A-30 t4t4 A:=AA:=A* *2 2 t5t5UPD AUPD A t6t6 8080UPD AUPD A t8t8 200200 图图8.5 8.5 在时间在时间t8t8丢失了事务丢失了事务T1T1的更新的更新 解决方法:解

30、决方法: 8.3.2 封锁技术封锁技术(1)(1) 定义定义8.3 8.3 锁(锁(locklock)是一个与数据项相关的变量,是一个与数据项相关的变量, 对可能应用于该数据项上的操作而言,锁描述了该对可能应用于该数据项上的操作而言,锁描述了该 数据项的状态。数据项的状态。 通常在数据库中每个数据项都有一个锁。锁的通常在数据库中每个数据项都有一个锁。锁的 作用是使并发事务对数据库中数据项的访问能够同作用是使并发事务对数据库中数据项的访问能够同 步。步。 封锁技术中主要有两种封锁:封锁技术中主要有两种封锁: 排他型封锁排他型封锁 共享型封锁共享型封锁 8.3.2 封锁技术封锁技术(2)(2) 1

31、.1.排他型封锁(排他型封锁(X X锁,写锁)锁,写锁) X X锁定义:锁定义:如果事务如果事务T T对某个数据对某个数据R R(可以是数据项、记(可以是数据项、记 录、数据集乃至整个数据库)实现了录、数据集乃至整个数据库)实现了X X锁,那么在锁,那么在T T对对 数据数据R R解除封锁之前,不允许其他事务解除封锁之前,不允许其他事务T T再对该数据加再对该数据加 任何类型的锁。这种锁称为任何类型的锁。这种锁称为“X X锁锁”。 X X锁的操作有两个:锁的操作有两个: 封锁操作封锁操作 “XFIND RXFIND R”:表示事务对数据表示事务对数据R申请加申请加X锁,若成功,锁,若成功, 则

32、可以读或写数据则可以读或写数据R,若不成功,那么这个事务将进入等待队列,直到获,若不成功,那么这个事务将进入等待队列,直到获 得得X锁,事务才继续做下去。锁,事务才继续做下去。 解锁操作解锁操作 “XRELEASE RXRELEASE R”:表示事务要解除对数据表示事务要解除对数据R的的X锁锁 X X锁的解除操作应该合并到事务的结束(锁的解除操作应该合并到事务的结束(COMMITCOMMIT或或 ROLLBACKROLLBACK)操作中。)操作中。 时间更新事务T1 DB中A的 值 更新事务T2 t0 100 t1XFIND A t2 XFIND A(失败) wait(等待) t3A:=A-3

33、0 wait t4 wait t5UPD A wait t6 80 wait t8COMMIT(含解锁) wait t8 XFIND A(重做) t9 A:=A*2 t10 UPD A t11 140COMMIT(含解锁) 8.3.2 封锁技术封锁技术(3)(3) 例例8.6 8.6 使用使用X X锁技术,可以解决图锁技术,可以解决图8.58.5的丢失更新问题。的丢失更新问题。 图图8.9 8.9 等事务等事务T1T1更新完成后再执行事务更新完成后再执行事务T2T2 2 2共享型封锁(共享型封锁(S S锁,读锁)锁,读锁) 定义定义8.5 8.5 如果事务如果事务T T对某数据加上对某数据加上

34、S S锁锁后,仍允许其他后,仍允许其他 事务再对该数据加事务再对该数据加S S锁,但在对该数据的所有锁,但在对该数据的所有S S锁都解锁都解 除之前决不允许任何事务对该数据加除之前决不允许任何事务对该数据加X X锁。锁。 S S锁的操作有三个:锁的操作有三个: 封锁操作 “SFIND R 升级和写操作 “UPDX R” 解锁操作 “SRELEASE R” 可以看出,获准可以看出,获准S S锁的事务只能读数据,不能更新数锁的事务只能读数据,不能更新数 据,若要更新,则先要把据,若要更新,则先要把S S锁升级为锁升级为X X锁。锁。 另外,由于另外,由于S S锁只允许读数据,因此解除锁只允许读数据

35、,因此解除S S锁的操作不锁的操作不 必非要合并到事务的结束操作中去,可以随时根据需必非要合并到事务的结束操作中去,可以随时根据需 要解除要解除S S锁。锁。 8.3.2 封锁技术封锁技术(4)(4) 时间更新事务T1 DB中A的 值 更新事务T2 t0 100 t1SFIND A t2 SFIND A t3A:=A-30 t4 A:=A*2 t5UPDX A(失败) t6wait UPDX A(失败) t8wait wait t8wait wait 8.3.2 封锁技术封锁技术(5)(5) 例例8.8 使用使用S S锁技术锁技术, ,也可以解决图也可以解决图8.5的丢失更新问题。的丢失更新问

36、题。 图图8.10 更新未丢失更新未丢失, ,但在时间但在时间t6t6发生了死锁发生了死锁 注:注: N=NO,不相容的请求,不相容的请求 Y=YES,相容的请求,相容的请求 X、S、:、: 分别表示分别表示X锁,锁,S锁,无锁锁,无锁 如果两个封锁是不相容如果两个封锁是不相容 的,则后提出封锁的事务的,则后提出封锁的事务 要等待。要等待。 XS XNNY SNYY YYY 8.3.2 封锁技术封锁技术(6)(6) 3 3封锁的相容矩阵封锁的相容矩阵 4 4封锁的粒度封锁的粒度 定义定义8.6 封锁对象的大小称为封锁对象的大小称为封锁的粒度封锁的粒度。 封锁的对象封锁的对象 逻辑单元逻辑单元:

37、 :属性值、属性值集合、元组、关系、索引项、整属性值、属性值集合、元组、关系、索引项、整 个索引、整个数据库个索引、整个数据库 物理单元物理单元 :页(数据页或索引页)、块页(数据页或索引页)、块 封锁粒度与系统并发度和并发控制开销密切相关。封锁粒度与系统并发度和并发控制开销密切相关。 粒度越大,系统中能被封锁的对象就越少,并发度就粒度越大,系统中能被封锁的对象就越少,并发度就 越小,但同时系统的开销也就越小;相反,粒度越小,越小,但同时系统的开销也就越小;相反,粒度越小, 并发度越高,系统开销越大。并发度越高,系统开销越大。 选择封锁粒度时必须同时考虑封锁机构与并发度两选择封锁粒度时必须同时

38、考虑封锁机构与并发度两 个因素,对系统开销与并发度进行权衡。个因素,对系统开销与并发度进行权衡。 8.3.2 封锁技术封锁技术(8)(8) 5 5封锁协议:封锁协议:三级封锁协议,分别在不同程度上三级封锁协议,分别在不同程度上 解决了并发操作带来的各种问题,为并发操作的正确解决了并发操作带来的各种问题,为并发操作的正确 调度提供一定的保证。调度提供一定的保证。 8.3.2 封锁技术封锁技术(8)(8) 表8.1 封锁协议的内容和优缺点 级别 内 容 优 点 缺 点 一级 封锁 协议 事务在修 改数据之 前,必须 先对该数 据加X锁, 直到事务 结束时才 释放 但只读数据的事务 可以不加锁 防止

39、“丢失修改” 不加锁的事务, 可 能 “ 读 脏 数 据 ” , 也 可 能 “不可重复读” 二级 封锁 协议 但其他事务在 读数据之前必 需先加S锁 读 完 数 据 后 即 可 释 放S锁 防止“丢失修改”, 防止“读脏数据” 对加S锁的事务, 可能“不可重复 读” 三级 封锁 协议 直 到 事 务 结 束 时 才 释放S锁 防止“丢失修改”, 防止“读脏数据”, 防止“不可重复读” 8.3 数据库的并发控制数据库的并发控制 8.3.1 8.3.1 并发操作带来的三个问题并发操作带来的三个问题 8.3.2 8.3.2 封锁技术封锁技术 8.3.3 8.3.3 封锁带来的问题封锁带来的问题 8

40、.3.4 8.3.4 并发操作的调度并发操作的调度 8.3.5 SQL8.3.5 SQL对事务处理的支持对事务处理的支持 8.3.3 封锁带来的问题封锁带来的问题(1)(1) 1 1“活锁活锁”问题问题 定义定义8.8 8.8 系统可能使某个事务永远处于等待状态,得系统可能使某个事务永远处于等待状态,得 不到封锁的机会,这种现象称为不到封锁的机会,这种现象称为“活锁活锁”(Live Live LockLock)。)。 解决活锁问题的一种简单的方法是采用解决活锁问题的一种简单的方法是采用“先来先先来先 服务服务”的策略,也就是简单的排队方式。的策略,也就是简单的排队方式。 如果运行时,事务有优先

41、级,那么很可能使优先如果运行时,事务有优先级,那么很可能使优先 级低的事务,既使排队也很难轮上封锁的机会。此时级低的事务,既使排队也很难轮上封锁的机会。此时 可采用可采用“升级升级”方法来解决,也就是当一个事务等待方法来解决,也就是当一个事务等待 若干时间(譬如若干时间(譬如5 5分钟)还轮不上封锁时,可以提高其分钟)还轮不上封锁时,可以提高其 优先级别,这样总能轮上封锁。优先级别,这样总能轮上封锁。 8.3.3 封锁带来的问题封锁带来的问题(2)(2) 2 2“饿死饿死”问题问题 定义定义8.8 8.8 有可能存在一个事务序列,其中每个事务有可能存在一个事务序列,其中每个事务 都申请对某数据

42、项加都申请对某数据项加S S锁,且每个事务在授权加锁后锁,且每个事务在授权加锁后 一小段时内释放封锁,此时若另有一个事务一小段时内释放封锁,此时若另有一个事务T2T2欲在欲在 该数据项上加该数据项上加X X锁,则将永远轮不上封锁的机会。这锁,则将永远轮不上封锁的机会。这 种现象称为种现象称为“饿死饿死”(starvationstarvation)。)。 可以用下列方式授权加锁来避免事务饿死。当可以用下列方式授权加锁来避免事务饿死。当 事务事务T2T2中请对数据项中请对数据项Q Q加加S S锁时,授权加锁的条件是:锁时,授权加锁的条件是: 不存在在数据项不存在在数据项Q Q上持有上持有X X锁的

43、其他事务;锁的其他事务; 不存在等待对数据项不存在等待对数据项Q Q加锁且先于加锁且先于T2T2申请加锁的申请加锁的 事务。事务。 8.3.3 封锁带来的问题封锁带来的问题(3)(3) 3. “3. “死锁死锁”问题问题 定义定义8.9 8.9 系统中有两个或两个以上的事务都处于等系统中有两个或两个以上的事务都处于等 待状态,并且每个事务都在等待其中另一个事务解待状态,并且每个事务都在等待其中另一个事务解 除封锁,它才能继续执行下去,结果造成任何一个除封锁,它才能继续执行下去,结果造成任何一个 事务都无法继续执行,这种现象称系统进入了事务都无法继续执行,这种现象称系统进入了“死死 锁锁”(De

44、ad LockDead Lock)状态。)状态。 时间事务T1事务T2 t0 XFIND A t1 XFIND B t2 XFIND B t3waitXFIND A t4waitwait 图图8.12 8.12 在时间在时间t4t4 两个事务发生死锁两个事务发生死锁 8.3.3 封锁带来的问题封锁带来的问题(4)(4) u我们可以用事务依赖我们可以用事务依赖 图的形式测试系统中图的形式测试系统中 是否存在死锁。图中是否存在死锁。图中 每 一 个 结 点 是每 一 个 结 点 是 “ 事事 务务”,箭头表示事务,箭头表示事务 间的依赖关系。间的依赖关系。 图图8.148.14为无环依赖图,表示为

45、无环依赖图,表示 系统未进入死锁状态;系统未进入死锁状态; 而图而图8.158.15为有环依赖图,则为有环依赖图,则 表示系统进入死锁状态。表示系统进入死锁状态。 数据数据B B 数据数据A A 8.3.3 封锁带来的问题封锁带来的问题(5)(5) uDBMSDBMS中有一个死锁测试程序,每隔一段时间检查并中有一个死锁测试程序,每隔一段时间检查并 发的事务之间是否发生死锁。发的事务之间是否发生死锁。 u如果发生死锁,那么只能抽取某个事务作为牺牲品,如果发生死锁,那么只能抽取某个事务作为牺牲品, 把它撤消,做回退操作,解除它的所有封锁,恢复把它撤消,做回退操作,解除它的所有封锁,恢复 到该事务的

46、初始状态。释放出来的资源就可以分配到该事务的初始状态。释放出来的资源就可以分配 给其他事务,使其他事务有可能继续运行下去,就给其他事务,使其他事务有可能继续运行下去,就 有可能消除死锁现象。有可能消除死锁现象。 u理论上,系统进入死锁状态时可能会有许多事务在理论上,系统进入死锁状态时可能会有许多事务在 相互等待,但是相互等待,但是System RSystem R的实验表明,实际上绝大的实验表明,实际上绝大 部分的死锁只涉及到两个事务,也就是事务依赖图部分的死锁只涉及到两个事务,也就是事务依赖图 中的循环里只有两个事务。有时,死锁也被形象地中的循环里只有两个事务。有时,死锁也被形象地 称作称作“死死拥抱死死拥抱”(Deadly EmbraceDeadly Embrace)。)。 8.3 数据库的并发控制数据库的并发控制 8.3.1 8.3.1 并发操作带来的三个问题并发操作带来的三个问题 8.3.2 8.3.2 封锁技术封锁技术 8.3.3 8.3.3 封锁带来的问题封锁带来的问题 8.3.4 8.3.4 并发操作的调度并发操作的调度 8.3.5 SQL8.3.5 SQL对事务处理的支持对事务处理的支持 事务的

温馨提示

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

评论

0/150

提交评论