最新并发控制 课后答案讲课教案
数据库原理与设计课件:第9章 并发控制
一数据并修改
④
– 事务2的提交结果破坏了事务1提
交的结果,导致事务1的修改被丢
失。
R=R-1 写回R=99 提交
2022/2/14
8
2. 不可重复读
不可重复读是事务T1读取数据后,T2对同一数据执行
更新操作,使T1再次读取该数据时,得到与前一次不
同的值。
三类不可重复读:
① T1 读A=50 读B=100 求和=150
可串行化调度的充分条件 – 一个调度S在保证冲突操作的次序不变的情况下, 通 过交换两个事务不冲突操作的次序得到另一个调度 S’ , 如果S’是串行的, 称调度S为冲突可串行化的调度
一个调度是冲突可串行化,一定是状态可串行的(可 串行化的调度)
– 冲突可串行化调度是可串行化调度的充分条件,不 是必要条件
– 但是调度L2是可串行化的 ➢的因值为,L2X执的行值的都结等果于与T调3的度值L1相同,Y的值都等于T2
2022/2/14
24
第9章 并发控制
2022/2/14
2
问题提出
2022/2/14
多事务执行方式(续)
– (1)事务串行执行
– (2)交叉并发方式interleaved concurrency
➢并行事务的并行操作轮流交叉运行
➢是单处理机系统中的并发方式,能够减 少处理机的空闲时间,提高系统的效率
– (3)同时并发方式simultaneous concurrency
第9章 并发控制
问题提出
多用户数据库系统特征 – 允许多个用户同时使用的数据库系统 ➢飞机定票数据库系统 ➢银行数据库系统 – 特点:在同一时刻并发运行的事务数可达数百个
多事务执行方式 – (1)事务串行执行 ➢每个时刻只有一个事务运行,其他事务必须等到 这个事务结束以后方能运行 ➢不能充分利用系统资源和数据库资源
第八章 数据库并发控制练习和答案
第八章数据库并发控制一、选择题1.为了防止一个用户得工作不适当地影响另一个用户,应该采取( )。
A、完整性控制B、访问控制C、安全性控制D、并发控制2、解决并发操作带来得数据不一致问题普遍采用()技术。
A、封锁B、存取控制C、恢复D、协商3.下列不属于并发操作带来得问题就是( )。
A、丢失修改B、不可重复读C、死锁D、脏读4.DBMS普遍采用( )方法来保证调度得正确性。
A、索引B、授权C、封锁D、日志5.事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放,这就是()。
A、一级封锁协议B、二级封锁协议C、三级封锁协议D、零级封锁协议6.如果事务T获得了数据项Q上得排她锁,则T对Q( )。
A、只能读不能写B、只能写不能读C、既可读又可写D、不能读也不能写7。
设事务T1与T2,对数据库中地数据A进行操作,可能有如下几种情况,请问哪一种不会发生冲突操作() .A、T1正在写A,T2要读AB、T1正在写A,T2也要写AC、T1正在读A,T2要写AD、T1正在读A,T2也要读A8。
如果有两个事务,同时对数据库中同一数据进行操作,不会引起冲突得操作就是() .A、一个就是DELETE,一个就是SELECTB、一个就是SELECT,一个就是DELETEC、两个都就是UPDATED、两个都就是SELECT9.在数据库系统中,死锁属于()。
A、系统故障B、事务故障C、介质故障D、程序故障二、简答题1、在数据库中为什么要并发控制?答:数据库就是共享资源,通常有许多个事务同时在运行。
当多个事务并发地存取数据库时就会产生同时读取与/或修改同一数据得情况.若对并发操作不加控制就可能会存取与存储不正确得数据,破坏数据库得一致性。
所以数据库管理系统必须提供并发控制机制。
2、并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致得情况?答: 并发操作带来得数据不一致性包括三类:丢失修改、不可重复读与读“脏”数据.(1)丢失修改(LostUpdate)两个事务T1与T2读入同一数据并修改,T2提交得结果破坏了(覆盖了)T1提交得结果,导致T1得修改被丢失。
《数据库技术与应用》第9章 并发控制 习题答案
第9章并发控制1. 试述DBMS中采用并发控制的目的。
解:并发控制是以事务为单位进行的。
DBMS中的并发控制的目的是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。
2. 试述共享锁和排他锁的含义。
解:排它锁又称为写锁。
排他锁是最严格的一类封锁,当需要对表进行插入、删除或更新操作时,应该使用排他锁。
当一个事务对某数据加上排他锁后,其他事务不得对该数据对象施加任何封锁。
共享锁又称为读锁。
当一个事务队某数据对象加上共享锁后,其他事务可以读取该数据,不能对该数据对象做任何修改。
共享锁可以保证最大的并发性,任何数量的用户可以同时对相同的数据施加共享锁。
3. 试述死锁是如何产生的,列举一些常见的预防死锁的方法。
解:产生死锁的原因是两个或多个事务都锁定了一些数据库对象,然后又都需要锁定对方的数据库对象失败而需要等待所造成的。
预防死锁通常有两种方法:一次封锁法和顺序封锁法。
一次封锁法要求每个事务一次就将要操作的数据库对象全部锁定,否则就不继续执行。
该方法会降低系统的并发度。
顺序封锁法要求预先对数据库对象规定一个封锁顺序,所有事务都按这个顺序来实行封锁。
该方法算法复杂,成本高。
4. 简述数据库系统中经常用到检测和解除死锁的方法。
解:数据库系统中检测死锁一般使用超时法或事务等待图法。
数据库管理系统一般采用如下方法来解除死锁:在循环等待的事务中,选择一个事务作为牺牲者,给其他事务“让路”。
回滚牺牲的事务,释放其获得的锁及其他资源。
将释放的锁让给等待它的事务。
5. 简述多粒度封锁的含义以及优点。
解:同时支持多种锁定粒度供事务选择的封锁方法叫做多粒度封锁。
其中,封锁对象可以是数据库、表、记录、列、索引等的逻辑单元,也可以是数据页或索引页、块等的物理单元。
采用多种粒度封锁能够提高并发度和减少锁的数量。
6. 试述意向锁的含义,简要介绍几种常见的意向锁。
解:意向锁的含义是,如果对一个节点加某种意向锁,则会对该节点的各级下级节点加这种锁;如果对一个节点加某种锁,则必须先对该节点的各级上级节点加这种意向锁。
第并发控制PPT学习教案
数据分区1
数据库 ……
数据分区n
关系1
……
关系n
元组1
……
元组1n
什么是数据分区(数据页)?
第29页/共36页
数据分区(数据页): •在逻辑上,操作系统把存储在磁盘上 的数据 文件分 成很多 逻辑页 。 •在读大的数据时,操作系统把数据一 页一页( 分页) 的读入 内存。 •需要修改一个数据时,操作系统会在 该页上 添加适 当的标 记(封锁 )。 •数据库文件的存储与其他文件类似, 故可以 在数据 分区上 进行封 锁。
前面3个例子中事务T1应该限制T2对数据进行的哪些操作?
第65页/共36页
例1:
T1
T2
R(A)=16
R(A)=16
AA-1
W(A)=15
AA-1
W(A)=15
限制T2对A读和写
原因是T1需要对数据进行修 改,其他任何事务在此期间对 数据的读/写都可能导致错误。
第76页/共36页
例2:
T1 R(A)=50 R(B)=100 求和=150
1、事务T1先操作数据A, T2,T3,…,Ti…等待;
2、T1完成后,T3操作数据A, T2,T4,…,Ti…等待;
3、T3完成后,T4操作数据A, T2,T5,…,Ti…等待; …… 结果是T2一直在等待,没有机会执行。 该种现象称为活锁。
解决方法:对请求操作的事务进行排队(放在一个队列结 构中),并按照队列的先进先出的原则实行先来先服务的 原则。
一次封锁法:每个事务必须一次将所有要使用的数据 全部加锁,否则就不能继续执行,缺点——扩大了封 锁的范围。
顺序封锁法:将所有数据进行排序,任何事务在封锁数 据时,必须按顺序进行封锁,缺点——随着数据的添加 /删除,维护成本很高。
数据库系统教学课件:第15讲-并发控制技术
讨论4. DBMS如何检查和处理死锁?
grant-X(B,T3)-成功
grant-S(A,T4) -成功
grant-S(B,T4) –等待
grant-X(A,T3) -等待
其等待图中一定带环
*
四 死锁处理
(某一事务)
对法1-2可能引起不足的避免
*
四 死锁处理
三
预防:避免死锁出现!
SI breaks serializability when txns modify different items, each based on a previous state of the item the other modified Not very common in practice E.g., the TPC-C benchmark runs correctly under SI when txns conflict due to modifying different data, there is usually also a shared item they both modify too (like a total quantity) so SI will abort one of them But does occur Application developers should be careful about write skew SI can also cause a read-only transaction anomaly, where read-only transaction may see an inconsistent state even if updaters are serializable We omit details Using snapshots to verify primary/foreign key integrity can lead to inconsistency Integrity constraint checking usually done outside of snapshot
Lecture13第十一章并发控制
问题的产生(续)
事务并发执行带来的问题
会产生多个事务同时存取同一数据的情况 可能会存取和存储不正确的数据,破坏事务一致性
和数据库的一致性
An Introduction to Database System
第十一章 并发控制
这时T2读到的C为 200,与数据库内容 不一致,就是“脏” 数据
An Introduction to Database System
并发控制概述(续)
数据不一致性:由于并发操作破坏了事务的隔离 性
并发控制就是要用正确的方式调度并发操作,使 一个用户事务的执行不受其他事务的干扰,从而 避免造成数据的不一致性
An Introduction to Database System
3. 读“脏”数据
读“脏”数据是指:
事务T1修改某一数据,并将其写回磁盘 事务T2读取同一数据后,T1由于某种原因被撤销 这时T1已修改过的数据恢复原值,T2读到的数据就与
数据库中的数据不一致 T2读到的数据就为“脏”数据,即不正确的数据
记号
R(x):读数据x W(x):写数据x
An Introduction to Database System
1. 丢失修改
两个 事 务 T1和 T2读 入同 一 数 据并 修 改 ,T2 的提 交 结果破坏了T1提交的结果,导致T1的修改被丢失。
上面飞机订票例子就属此类
An Introduction to Database System
11.1 并发控制概述 11.2 封锁 11.3 活锁和死锁 11.4 并发调度的可串行性 11.5 两段锁协议 11.6 封锁的粒度 11.7 小结
《数据库并发控制》课件
• 数据库并发控制概述 • 数据库锁机制 • 数据库事务隔离级别 • 多版本并发控制 • 数据库并发控制的优化 • 数据库并发控制的案例分析
01
数据库并发控制概述
并发控制的定义
并发控制
在数据库系统中,并发控制用于协调多个事务的 执行,确保数据的一致性和完整性。
一致性
索引优化的方法
选择合适的索引类型、合理规划索引列、定期维护和重建索引等。
SQL语句优化
总结词
优化SQL语句可以提高数据库查询性能,减少并发控制时的 资源争用。
详细描述
通过编写高效的SQL语句,可以减少数据库的负载,降低并发控 制时的竞争。常见的SQL语句优化技巧包括使用连接代替子查询
、减少全表扫描等。
SQL语句优化的方法
分析查询执行计划、使用数据库提供的性能监控工具、编 写简洁高效的SQL语句等。
数据库设计优化
总结词
良好的数据库设计可以提高数据存储和访问的效率,降低 并发控制时的冲突。
详细描述
数据库设计包括表结构设计、关系设计、存储过程和触发 器设计等。通过合理设计,可以减少数据冗余、提高数据 一致性,从而降低并发控制时的竞争。
02
数据库锁机制
锁的分类
共享锁(Shared Lock)
允许事务读取一个资源,阻止其他事务获取独占锁。
排他锁(Exclusive Lock)
允许事务修改或删除一个资源,阻止其他事务获取共享锁或排他锁。
更新锁(Update Lock)
用于防止死锁,允许事务在资源上获得排他锁之前先获得一个较弱的 锁。
案例二:电商系统并发控制优化
总结词
利用乐观锁和事务隔离级别
并发掌握 课后答案
更新后的值,再按此新的 A 值进行运算。这样就 不会丢失 T1 的更新。
DBMS 按照一定的封锁协议,对并发操作进行控制,使得多个并发操作有序地执行,就可 以避免丢失修改、不可重复读和读"脏"数据等数据不一致性。
6.什么是封锁协议?不同级别的封锁协议的主要区别是什么? 答:在运用封锁技术对数据加锁时,要约定一些规则。例如,在运用 X 锁和 S 锁对数据
答:并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读"脏"数据。 (1)丢失修改(Lost Update)两个事务 T1 和 T2 读入同一数据并修改,T2 提交的结果破 坏了(覆盖了)T1 提交的结果,导致 T1 的修改被丢失。 (2)不可重复读(Non -Repeatable Read)不可重复读是指事务 T1 读取数据后,事务 T2 执行更新操作,使 T1 无法再现前一次读取结果。不可重复读包括三种情况:详见《概论》 8.1(P266)。 (3)读"脏"数据(Dirty Read)读"脏"数据是指事务 T1 修改某一数据,并将其写回磁盘, 事务 T2 读取同一数据后,T1 由于某种原因被撤销,这时 T1 已修改过的数据恢复原值,T2 读 到的数据就与数据库中的数据不一致,则 T2 读到的数据就为"脏"数据,即不正确的数据。 避免不一致性的方法和技术就是并发控制。最常用的技术是封锁技术。也可以用其他 技术,例如在分布式数据库系统中可以采用时间戳方法来进行并发控制。 3. 3. 什么是封锁? 答:封锁就是事务 T 在对某个数据对象例如表、记录等操作之前,先向系统发出请求, 对其加锁。加锁后事务 T 就对该数据对象有了一定的控制,在事务 T 释放它的锁之前,其他 的事务不能更新此数据对象。封锁是实现并发控制的一个非常重要的技术。 4. 4. 基本的封锁类型有几种?试述它们的含义。 答:基本的封锁类型有两种:排它锁(Exclusive Locks, 简称 X 锁 )和共享锁(Share Locks,简称 S 锁)。 排它锁又称为写锁。若事务 T 对数据对象 A 加上 X 锁,则只允许 T 读取和修改 A,其他 任何事务都不能再对 A 加任何类型的锁,直到 T 释放 A 上的锁。这就保证了其他事务在 T 释 放 A 上的锁之前不能再读取和修改 A。 共享锁又称为读锁。若事务 T 对数据对象 A 加上 S 锁,则事务 T 可以读 A 但不能修改 A,其 他事务只能再对 A 加 S 锁,而不能加 X 锁,直到 T 释放 A 上的 S 锁。这就保证了其他事务可 以读 A,但在 T 释放 A 上的 S 锁之前不能对 A 做任何修改。 5.如何用封锁机制保证数据的一致性 ? 答:DBMS 在对数据进行读、写操作之前首先对该数据执行封锁操作,例如下图中事务 T1 在对 A 进行修改之前先对 A 执行 XLock(A),即对 A 加 X 锁。这样,当 T2 请求对 A 加 X 锁 时就被拒绝,T2 只能等待 T1 释放 A 上的锁后才能获得对 A 的 X 锁,这时它读到的 A 是 T1
数据库5版讲稿第十六章---并发控制
22
基于锁的协议
12
LOCK-X(F)
13
GANT-X(F,T11)
14
F=TEMP2+1
15
1,0,0
WRITE(F)
16
1,0,0
COMMIT
17
UNLOCK-X(F)
18
LOCK-X(H)
19
GANT-X(H,T9)
20
H=TEMP1+1
21
WRITE(H) 1,0,1
22
COMMIT
1,0,1
0,0,1
UNLOCK-S(F)
2,0,1 2,0,1
READ(H) TEMP2=H LOCK-X(F)
等待
F=TEMP2+1 WRITE(F)
COMMIT UNLOCK-X(F) UNLOCK-S(H)
GANT-S(H,T11) GANT-X(F,T11)
2020/10/28
数据库系统概念----并发控制
COMMIT UNLOCK-X(H)
0,0,1 0,0,1
T11
LOCK-S(H) 等待 等待 等待 等待
并发控制器 GANT-S(F,T9) GANT-X(H,T9)
2020/10/28
数据库系统概念----并发控制
18
基于锁的协议
13 14 15 16 17 18 19 20 21 22 23
T1
库A的值
T2
100
LOCK-S(A)
LOCK-X(A)
READ(A)
100
UNLOCK-S(A)
Read(A)
A=A-30
WRITE (A)
70
并发控制 课后答案
第八章并发控制习题解答和解析1.1. 在数据库中为什么要并发控制?答:数据库是共享资源,通常有许多个事务同时在运行。
当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况。
若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。
所以数据库管理系统必须提供并发控制机制。
2.2. 并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致的情况?答:并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读"脏"数据。
(1)丢失修改(Lost Update)两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了(覆盖了)T1提交的结果,导致T1的修改被丢失。
(2)不可重复读(Non -Repeatable Read)不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。
不可重复读包括三种情况:详见《概论》8.1(P266)。
(3)读"脏"数据(Dirty Read)读"脏"数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为"脏"数据,即不正确的数据。
避免不一致性的方法和技术就是并发控制。
最常用的技术是封锁技术。
也可以用其他技术,例如在分布式数据库系统中可以采用时间戳方法来进行并发控制。
3. 3.什么是封锁?答:封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。
加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。
封锁是实现并发控制的一个非常重要的技术。
4. 4.基本的封锁类型有几种?试述它们的含义。
答:基本的封锁类型有两种:排它锁(Exclusive Locks, 简称 X 锁 )和共享锁(Share Locks,简称 S 锁)。
并发控制-课后答案
并发控制■课后答案数据T2读入同一数 °T1和 (覆盖了 )T1 可 读是使重复无 roll 0 复读疋读包括 ⑶读表、' 表。
重4. 4.要基第八章并发控制「答:本本锁封类型Exclusive Lock 匚 Share Locks,简称 S排它锁又称为写锁。
若事篦旅T 对数据对象A *排锁锁又对为加任if!锁对其他任& 加上共锁卅和可以读事但不能修改居对其A加上但如何释封锁机制保证之据不 先对该进能样之前操!求对 绝,T 2锁。
这时待它当 按此新的A 值进 新。
_ .......... 的加新才进行运算。
这样就不会丢 锁新才,丁w① ZlDck 3②读A=16*'in&ck Mv^vVTrwv^rv③ A-*-JL-l務J写回A=15Commit 等待*Unlock A荻得切读 A=15-' 写回A=14t⑤Unlock 2制议uw 锁 序地执行就可以避性修改、不可重复读和读"脏"数据等数据不一致 区别是是么是么锁协议?不同级别的封锁协议的主要 一些规答则:在运如 加锁等则要约 (lockin封议;疋或Protocol:口封锁技术对数据加加锁 在运用则X !和 论的封锁协中么操三级封的请封锁/何时申请封锁以及何时释放锁(即持锁。
R之前必事完后即可在请封锁丿何时时间一长封锁协议:善务T 须先数级封之前必须到事对封读放数级R之刖必须先对封读取释级封之前必须先级封7.不同封锁协议与系统一致性级别的关系是什答:不同的封锁协议对应不同的一致性级修改复读和不读么?别。
不加可恢脏"数据II完数良封后立致性保证操事操事作务作务结结结结束束束束释释释释放放放放不丢失修改不读"脏"数据可重复读8.什么是活锁?什么是死锁?答:TI T2 T3 T4lockR的封锁远等系统这批准■lock R■等待lock R .Un lock 等待■lock R■等待■等待■等待■等待■等待Un lock 等待■等待■lock R■等待.活锁的含实是该 R2,然于封锁R 1等因. 封锁等待因锁 结束等待成-一T2T1务等待时间太长,似乎被 R2待lock R1等待9试述活活锁产 照其待某顺序: 策略避当 数略子系 10.请待个被其他 的条防止预[原因和解决方法。
《数据库原理》并发控制教学案例设计
0引言数据库具有高共享性,即多个用户可以同时使用数据库,这样在数据库系统中,同一时刻可以并发运行多个事务。
根据系统中处理机的个数,并发执行有两种方式,它们分为交叉并发方式和同时并发方式。
交叉并发方式是指在单处理机系统中,多个事务轮流交叉运行,多个事务并没有真正并行执行,但这种执行方式减少了处理机的空闲时间,从而提高系统效率。
同时并发方式是指在多个处理机系统中,每个事务运行在一个处理机上,多个事务同时运行在多个处理机上,从而实现多个事务真正的并行运行。
本文中数据库系统并发控制技术是以单处理机系统为基础。
当多个用户同时访问数据库就可能出现多个事务同时存取或存储数据的情况。
若不对并发操作加以控制就会破坏事务的一致性从而存取或存储不正确的数据,因此并发控制是数据库管理系统必不可少的组成部分。
封锁机制是并发控制的重要技术,本文基于SQL Server2012设计几个教学案例帮助学生更好地理解锁,从而掌握并发控制机制。
1SQL server2012并发控制技术SQL Sever是企业级产品,一个重要功能是要支持多用户的并发操作,这些操作有读取数据及修改数据,如果一个用户要读取正在被其他用户修改的数据,或者一个用户要修改其他用户正在修改的数据,就需要某种机制规范这些操作,使得在保证数据一致性的情况下,又不会对并发性产生较大影响。
SQL Server主要通过锁的机制实现对并发操作的规范,在访问资源时,根据资源类型和操作类型,要先在访问资源上获得合适的锁,才能完成资源访问操作。
一个操作如何使用锁,与操作类型、资源类型、是否使用索引以及事务隔离级别有很大关系。
数据库中常用的锁有共享锁、排他锁。
共享锁(S锁)若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,直到T释放A上的S锁。
这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A 做任何修改。
排他锁(X锁)若事务T对数据对象A加上X 锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第八章并发控制习题解答和解析1. 1.在数据库中为什么要并发控制?答:数据库是共享资源,通常有许多个事务同时在运行。
当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况。
若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。
所以数据库管理系统必须提供并发控制机制。
2. 2.并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致的情况?答:并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读"脏"数据。
(1)丢失修改(Lost Update)两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了(覆盖了)T1提交的结果,导致T1的修改被丢失。
(2)不可重复读(Non -Repeatable Read)不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。
不可重复读包括三种情况:详见《概论》8.1(P266)。
(3)读"脏"数据(Dirty Read)读"脏"数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为"脏"数据,即不正确的数据。
避免不一致性的方法和技术就是并发控制。
最常用的技术是封锁技术。
也可以用其他技术,例如在分布式数据库系统中可以采用时间戳方法来进行并发控制。
3. 3.什么是封锁?答:封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。
加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。
封锁是实现并发控制的一个非常重要的技术。
4. 4.基本的封锁类型有几种?试述它们的含义。
答:基本的封锁类型有两种:排它锁(Exclusive Locks, 简称 X 锁 )和共享锁(Share Locks,简称 S 锁)。
排它锁又称为写锁。
若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。
这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。
共享锁又称为读锁。
若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。
这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
5.如何用封锁机制保证数据的一致性 ?答:DBMS在对数据进行读、写操作之前首先对该数据执行封锁操作,例如下图中事务T1在对A进行修改之前先对A执行XLock(A),即对A加X锁。
这样,当T2请求对A加X锁时就被拒绝,T2只能等待T1释放A上的锁后才能获得对A的X锁,这时它读到的A是T1更新后的值,再按此新的A值进行运算。
这样就不会丢失T1的更新。
DBMS按照一定的封锁协议,对并发操作进行控制,使得多个并发操作有序地执行,就可以避免丢失修改、不可重复读和读"脏"数据等数据不一致性。
6.什么是封锁协议?不同级别的封锁协议的主要区别是什么?答:在运用封锁技术对数据加锁时,要约定一些规则。
例如,在运用X锁和S锁对数据对象加锁时,要约定何时申请X锁或S锁、何时释放封锁等。
这些约定或者规则称为封锁协议(locking Protocol)。
对封锁方式约定不同的规则,就形成了各种不同的封锁协议、不同级别的封锁协议,例如《概论》8.3中介绍的三级封锁协议,三级协议的主要区别在于什么操作需要申请封锁,何时申请封锁以及何时释放锁(即持锁时间的长短)。
一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。
二级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。
三级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。
7.不同封锁协议与系统一致性级别的关系是什么?答:不同的封锁协议对应不同的一致性级别。
一级封锁协议可防止丢失修改,并保证事务T是可恢复的。
在一级封锁协议中,对读数据是不加S锁的,所以它不能保证可重复读和不读"脏"数据。
二级封锁协议除防止了丢失修改,还可进一步防止读"脏"数据。
在二级封锁协议中,由于读完数据后立即释放S锁,所以它不能保证可重复读。
在三级封锁协议中,无论是读数据还是写数据都加长锁,即都要到事务结束才释放封锁。
所以三级封锁协议除防止了丢失修改和不读"脏"数据外,还进一步防止了不可重复读。
下面的表格清楚地说明了封锁协议与系统一致性的关系。
8.什么是活锁?什么是死锁?答: TI T2 T3 T4lock R . . .. lock R . .. 等待 lock R .Unlock 等待 . lock R. 等待 . 等待. 等待 . 等待. 等待 Unlock 等待. 等待 . lock R. 等待 . .如果事务T1封锁了数据R,事务T2飞又请求封锁R,于是T2等待。
T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。
然后T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求……T2有可能永远等待,这就是活锁的情形。
活锁的含义是该等待事务等待时间太长,似乎被锁住了,实际上可能被激活。
如果事务Tl封锁了数据R1,T2封锁了数据R2,然后T1又请求封锁R2,因T2已封锁了R2,于是T1等待T2释放R2上的锁。
接着T2又申请封锁R1,因T1已封锁了R1,T2也只能等待T1释放Rl上的锁。
这样就出现了T1在等待T2,而T2又在等待Tl的局面,T1和T2两个事务永远不能结束,形成死锁。
T1 T2lock R1 .. lock R2. .lock R2 .等待 .等待 lock R1等待等待9.试述活锁的产生原因和解决方法。
答:活锁产生的原因:当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致活锁。
避免活锁的简单方法是采用先来先服务的策略。
当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。
10.请给出预防死锁的若干方法。
答:在数据库中,产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求已被其他事务封锁的数据加锁,从而出现死等待。
防止死锁的发生其实就是要破坏产生死锁的条件。
预防死锁通常有两种方法:(1)一次封锁法,要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行;(2)顺序封锁法,预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。
不过,预防死锁的策略不大适合数据库系统的特点,具体原因可参见《概论》8.4。
11.请给出检测死锁发生的一种方法,当发生死锁后如何解除死锁?答:数据库系统一般采用允许死锁发生,DBMS检测到死锁后加以解除的方法。
DBMS中诊断死锁的方法与操作系统类似,一般使用超时法或事务等待图法。
超时法是:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。
超时法实现简单,但有可能误判死锁,事务因其他原因长时间等待超过时限时,系统会误认为发生了死锁。
若时限设置得太长,又不能及时发现死锁发生。
DBMS并发控制子系统检测到死锁后,就要设法解除。
通常采用的方法是选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有锁,使其他事务得以继续运行下去。
当然,对撤销的事务所执行的数据修改操作必须加以恢复。
12.什么样的并发调度是正确的调度?答:可串行化(Sertalizable)的调度是正确的调度。
可串行化的调度的定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行执行它们时的结果相同,称这种调度策略为可串行化的调度。
13.设T1,T2,T3是如下的3个事务:T1:A:=A+2;T2:A:=A*2;T3:A:=A**2;设A的初值为0。
(1)若这3个事务允许并行执行,则有多少可能的正确结果,请一一列举出来。
答:A的最终结果可能有2、4、8、16。
因为串行执行次序有T1 T2 T3、T1 T3 T2、T2 T1 T3、T2 T3 T1、T3 T1 T2、T3 T2 T1。
对应的执行结果是16、8、4、2、4、2。
(2)请给出一个可串行化的调度,并给出执行结果答:T1 T2 T3slock AY=A=OUnlock AXlock ASlock AA=Y+2 等待写回 A(=2) 等待Unlock A 等待Y=A=2Unlock AXlock ASlock AA=Y*2 等待写回 A(=4) 等待Unlock A 等待Y=A=4Unlock AXlock A写回 A(=16)Unlock A最后结果A为16,是可串行化的调度。
(3)请给出一个非串行化的调度,并给出执行结果。
答:T1 T2 T3Slock AY=A=0Unlock ASlock AY=A=0Xlock A等待 Unlock AA=Y+2写回 A(=2) Slock AUnlock A 等待Y=A=2Unlock AXlock AXlock A等待 A=Y**2等待写回 A(=4)等待 Unlock AA=Y*2写回 A(=0)Unlock A最后结果 A 为 0, 为非串行化的调度。
(4)若这3个事务都遵守两段锁协议,请给出一个不产生死锁的可串行化调度。
答: T1 T2 T3Slock AY=A=OXlock AA=Y+2 Slock A写回 A(=2) 等待Unlock A 等待Y=A=2Xlock A等待 Slock AA=Y*2 等待写回A(=4) 等待Unlock A 等待Y=A=4Xlock AA=Y**2写回 A(=16)Unlock A(5)若这3个事务都遵守两段锁协议,请给出一个产生死锁的调度。
答:T1 T2 T3Slock AY=A=0Slock AY=A=0Xlock A等待Xlock A等待Slock AY=A=0Xlock A等待14.试述两段锁协议的概念。
答:两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。
•在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁;•在释放一个封锁之后,事务不再申请和获得任何其他封锁。
"两段"的含义是,事务分为两个阶段:第一阶段是获得封锁,也称为扩展阶段,在这阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁;第二阶段是释放封锁,也称为收缩阶段,在这阶段,事务释放已经获得的锁,但是不能再申请任何锁。