数据库系统 ##并发控制

数据库系统

并发控制

基本概念

三种不一致现象
  1. 丢失修改:非互斥的修改
  2. 不能重复读:两次读结果不一致
  3. 脏读:读到错误的值
数据一致性

对共享事务应该反映出一致的状态

事务

一系列操作作为一个整体进行操作和控制
应用程序员控制事务起始和结束
一系列sql语句,直到commit或rollback才标志一个事务结束
DBMS保证事务全部执行或不执行

并发控制

逻辑上对多个事务进行切换执行
通过事务微观交错执行次序的正确安排,保证事务宏观的独立性、完整性和正确性

事务的特性:ACID
  1. 原子性:全做或不做
  2. 一致性:正确的
  3. 隔离性:多个事务间不受影响
  4. 持久性:提交是持久的和撤销是可恢复的
事务结构

事务管理器
事务调度器:产生调度
锁表:

事务调度和可串行性

事务调度:一组事务的一种执行顺序
并发调度:多个事务宏观上是并发,微观上是交叉执行的。内容上正确。
并发调度的正确性:并发调度的结果和串行结果完全一致
可串行性调度:不管数据库初始状态如何,如果一个调度能保证和串行结果相同那么具有可串行性。形式上正确。
可串行性调度一定是并发调度,并发调度不一定是可串行性调度:可串行性更加严格
可串行性的等效串行序列(串行结果)不一定唯一。

冲突

记号:r1(A),w2(B):事务1读A,事务2写B
冲突:一对事务操作,如果顺序交换那么至少有一个事务的行为会被改变
同一个事务的任何两个操作都是冲突的
不同事务对同一元素的写操作是冲突的
不同事务对同一元素的一读一写操作是冲突的
冲突可串行性:一个通过多次交换相邻两个无冲突操作转换成一个串行调度
冲突可串行性一定满足可串行性,反之不然。
冲突可串行判别算法:
以事务做节点,如果调度中存在冲突则在相应节点间画有向边。若果最后图中没有环则是冲突可串行化的。

基于封锁的并发控制:基于锁

概念

锁:数据锁,提供了控制手段但不能保证冲突可串行性
加锁/解锁:新增的基本操作
锁协议需要考虑的因素
锁的类型:不同类型提高并发性又保证正确性
X排他锁:只有有锁的事务能读写,其他不能读写。写锁
S共享锁:所有事物能读,但都不能写。读锁
U更新锁:初始读锁,后可升级为写锁
I增量锁:区分增量更新好其他更新
相容性矩阵
读写锁协议
更新锁协议
加锁解锁时机:0-3级协议
隔离性级别
分锁粒度:属性-元组-元组集合-关系表-整个数据库
粒度大分锁开销小,并发度小。一般在元组级别加锁

两段分锁协议2PL

读写数据之前要获得锁。每个事务中所有封锁请求先于任何一个解锁请求
两阶段:加锁段,解锁段。加锁段中不能有解锁操作,解锁段中不能有加
锁操作
可能产生死锁

基于时间戳的并发控制:基于撤回

时间戳:一种基于时间的标志,将某一时刻转换成一个数值。唯一性和递增性
事务时间戳:事务启动时赋予时间戳
RT(X):对元素x的最后读时间戳
WT(X):对元素x的最后写时间戳
TS(T):事务T时间戳

简单调度规则

读写并发:TS与WT/RT比较,若大于允许操作,否则撤回T并重启
写写并发:TS与WT比较,若大于允许操作,否则撤回T并重启

另一种调度规则
C(X):最近的写已经提交

当T读请求时:

  1. TS(T)>=WT(x)时:
    1. C(X)为真,允许操作
    2. C(X)为假,推迟T指导C(X)为真
  2. TS(T)

基于有效性确认的并发控制:基于撤回

基于时间戳:通过判断冲突来强制使事务以可串行化的方式执行。
基于有效性确认:事务读写集合

RS(T):事务T的读数据集合
WS(T):事务T的写数据集合

调度器的三个阶段:

  1. 读阶段
  2. 有效性确认阶段
  3. 写阶段
    每个成功确认的事务是在其有效性确认的瞬间执行的。
    并发事务的串行顺序即事务有效性确认的顺序。

调度器管理的三个集合:

  1. START:事务开始时间集合
  2. VAL:事务有效性确认时间集合
  3. FIN:事务完成时间集合
有效性确认规则
  1. 对于所有已经过有效性确认, 且在T开始前没有完成的U, 即对于满足
    FIN(U)>START(T)的U,检测:
    RS(T)交WS(U)是否为空。
    若为空,则确认。否则,不予确认。
  2. 对于所有已经过有效性确认,且在T有效性确认前没有完成的U, 即对于
    满足FIN(U)>VAL(T)的U, 检测:
    WS(T)交WS(U)是否为空。
    若为空,则确认。否则,不予确认
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值