- 1、本文档共87页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1
数据库系统
数据库系统与应用
并发控制
并发控制
数据库恢复技术
2
并发控制概述
事务模型
事务调度与可串行性
基于锁的并发控制协议
3
并发控制技术
数据库系统一般可以分为单用户和多用户系统两种。
在任何时刻只允许一个用户使用的数据库系统称为单用户数据库系统。
允许多个用户同时使用的数据库系统称为多用户数据库系统。
多数数据库系统都是多用户系统。
例如飞机订票数据库系统、银行数据库系统等
4
并发控制概述
在一个多用户数据库系统中,数据库中存储的数据项是用户程序存取的基本信息资源。
一个存取或改变数据库内容的程序的运行称为一个数据库事务,简称事务。
多个事务可同时运行并同时要求存取或修改同一个数据库记录。如果不对并发运行的事务加以适当的控制,则会引起很多问题。
5
并发控制概述
以飞机订座数据库系统为例:
每个航班对应一个数据库记录。每个记录包括对应航班已经预订的座位数和一些其他信息
设X和Y分别是航班A1和A2对应的数据库记录。
事务T1取消航班A1上已经预订的N个座位,并为航班A2增加N个预订座位.
事务T2为航班A1增加M个座位。
6
并发控制概述
数据更新丢失问题
7
并发控制概述
临时值问题
8
并发控制概述
错误聚集计算问题
9
并发控制概述
T1
READ(X)
X:=X-N
WRITE(X)
READ(Y)
Y:=Y+N
WRITE(Y)
T3
SUM=0
READ(A)
SUM=SUM+A
READ(X)
SUM=SUM+X
READ(Y)
SUM=SUM+Y
并发控制概述
事务模型
事务调度与可串行性
基于锁的并发控制协议
10
并发控制技术
一个存取或更改数据库的程序的运行过程称为数据库事务,简称事务。
事务是数据库应用程序的基本逻辑单位。
11
事务模型
任何事务都使用READ和WRITE操作存取数据库
READ(X, Y)的实现算法:
确定包含数据项X的磁盘块的地址A;
如果地址为A的数据不在主存缓冲区中,则把A所在磁盘块读入到主存缓冲区;
从主存缓冲区中找到数据项X,存入程序变量Y。
12
事务模型
任何事务都使用READ和WRITE操作存取数据库
WRITE(Y, X)的实现算法:
确定包含数据项X的磁盘块的地址A;
如果地址为A的磁盘块不在主存缓冲区中,则把A磁盘块读入主存缓冲区;
把程序变量Y的值存入A磁盘块所在主存缓冲区;
立即或以后把包含A磁盘块的缓冲区写到磁盘存储器。
13
事务模型
事务的原子性
事务中的所有操作要么全部被成功地完成而且这些操作的结果被永久地存储到数据库中,要么这个事务对数据库和其他事务没有任何影响。称这个性质为事务的原子性。
每个事务都必须满足原子性。
14
事务模型
事务的原子性
事务原子性可能遭到破坏的因素有如下两个:
多个事务并发运行时,不同事务的操作交叉运行。
数据库管理系统必须保证多个事务的交叉运行不影响这些事务的原子性。
事务在运行中间被强行停止。
数据库管理系统必须保证被强行终止的事务对数据库和其他事务没有任何影响。
保证事务原子性的主要方法是“串行化”方法。
15
事务模型
事务的状态
16
事务模型
事务的性质
原子性 事务是数据库系统运行的原子程序单元。每个事务的所有操作要么被全部成功地执行,要么一个也不被执行;
数据库正确保持性 一个事务的正确执行必须把数据库从一个正确状态转换为另一个正确状态;
操作结果永久保持性 如果一个事务使数据库发生了改变,而且该事务已经进入提交状态,则这些改变将不会因以后的失败而丢失;
独立性 一个事务在进入提交状态之前,它对数据库的更新不可由其他事务读取。这个性质避免了上节讨论的临时值问题,也避免了后边将讨论的嵌套回滚处理问题;
可串行性 并发运行的多个事务的运行效果与这些事务按某种次序顺序运行的效果相同.
17
事务模型
并发控制概述
事务模型
事务调度与可串行性
基于锁的并发控制协议
18
并发控制技术
设T0和T1是两个事务。
事务T0从帐号A转50元钱到帐号B。
事务T1把帐号A的存款的10%转到帐号B。
19
事务调度与可串行性
T0:
READ(A);
A := A - 50;
WRITE(A);
READ(B);
B := B + 50;
WRITE(B)
T1:
READ(A);
tmp := A×0.1;
A := A-tmp;
WRITE(A);
READ(B);
B := B+tmp;
WRITE(B)
设帐号A和帐号B目前的存款分别是1000元和2000元。
调度1:
20
事务调度与可串行性
A和B的最终值分别是855和2145元,A+B在两个事务执行结束时仍然是1000+2000。
设帐号A和帐号B目前的存款分别是1000元和2000元。
调度2:
2
文档评论(0)