数据库第十一章并发控制

11.1 并发控制概述

多事务执行方式
  • 事务串行执行:每个时刻只有一个事务,其他事务必须等他执行完;
  • 交叉并发方式:单处理机系统的并发形式;
  • 同时并发方式:多处理机系统中,每个处理机执行一个事务;
并发控制机制的任务
  • 对并发操作进行正确调度
  • 保证事务的隔离性;
  • 保证数据库的一致性:不可重复读(1读完后,2进行修改、删除等);丢失修改(2的结果覆盖了1的结果);读“脏”数据(1修改完结果后,被撤销);

11.2 封锁

  • 定义:事务T对某个数据对象操作之前,先向系统发出请求对其加锁,值释放之前,其他事务不可以更新此数据对象;
  • 基本封锁类型:①排它锁(X锁)②共享锁(S锁);
  • 排它锁:事务T给对象A加上排他锁后,只允许T读取和修改A,其他任何事务不能再给A加上任何锁,直到T释放了A的锁
  • 共享锁:T给A加上S锁后,其他事物只可以添加S锁

11.3 封锁协议

一级封锁协议
  • 事务T在修改数据之前一定要添加X锁,直到事务结束释放;
  • 可以防止丢失修改,但是不可以保证“可重复读”和“读脏数据”
二级封锁协议
  • 一级封锁协议+读之前添加S锁,读完释放
  • 可以防止丢失修改和读脏数据,不可以保证重复读;
三级封锁协议
  • 一级封锁协议+读之前添加S锁,事务结束释放;
  • 三个都可以防止!
    在这里插入图片描述

11.4 活锁和死锁

  • 活锁:可能一直等待,采用先来先服务来预防
  • 死锁:两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。
  • 预防死锁的方法:①一次封锁法:每个事务一次将所有需要的数据加锁;②顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。
  • 检测死锁的方法:超时法;等待图法;

11.5 并发调度的可串行性

  • :将所有事务串行起来的调度策略一定是正确的调度策略
  • 几个事务的并行执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同。这种并行调度策略称为可串行化(Serializable)的调度
  • 保证并发操作调度正确性的方法:两段锁协议

11.6 两段锁协议

定义
  • 在对任何数据进行读、写操作之前,事务首先要申请并获得对该数据的封锁
  • 在释放一个封锁之后,事务不再申请和获得任何其他封锁。
例子
  • Slock A … Slock B … Xlock C … Unlock B … Unlock A … Unlock C;(遵循)
  • Slock A … Unlock A … Slock B … Xlock C … Unlock C … Unlock B;(不遵循)
原则
  • 所有遵守两段锁协议的事务,其并行执行的结果一定是正确的
  • 可串行化的调度中,不一定所有事务都必须符合两段锁协议。
两段锁协议三级封锁协议
保证并发调度的正确性在不同程度上保证数据的一致性
遵守第三级封锁协议一定遵循两段锁协议

11.7 封锁的粒度

11.8 Oracle的并发控制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值