数据库并发控制机制

wom知道事务的ACID特性被破坏的原因之一就是多个事务对数据库的并发操作造成的。所以 数据库管理系统需要对这些并发操作进行正确的调度,并发控制机制就是用正确的方式调度并发操作,使一个用户事务不收其他事务的干扰。
并发控制的技术主要有封锁,时间戳,乐观控制发和多版本并发控制

1. 封锁

基本的封锁类型有:排他锁(X锁,写锁)和共享锁(S锁,读锁)
数据库中的共享锁和排他锁:https://blog.csdn.net/qq_41386300/article/details/101937234

1.1 封锁协议

封锁协议:何时申请锁,持锁时间,何时释放

  • 一级封锁协议
    事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放
    只能避免事务的丢失更新

  • 二级封锁协议
    在一级的基础上增加:事务T在读取数据R之前必须加S锁,,读完后释放
    进一步避免了脏读

  • 三级封锁协议
    一级的基础是上增加:事务T在读取数据R之前必须加S锁,,事务结束后释放
    进一步避免了不可重复读

1.2 活锁和死锁
活锁

如果事务T1封锁里数据R,事务T2也请求封锁R,T2等待,事务T3也请求封锁R,当T1释放里R的锁后,系统首先批准了T3的请求,T2继续等待,然后T4又请求封锁R,T3释放锁后系统又批准里T4的请求…T2有可能永远等待,这就是活锁的情形

避免活锁的简单方法是采用先来先服务策略

死锁

死锁就是循环等待的情形

数据库中解决死锁问题主要有两类办法:一是采取一定措施预防死锁的发生;二是定期诊断是否有死锁,有则解除它

  1. 死锁预防
    • 一次封锁法
      每个事务都一次性将所有要使用的数据全部加锁
    • 顺序封锁法
      预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实施封锁

数据库中普遍采用诊断并解除的方法

  1. 死锁诊断与解除
    • 死锁诊断
      • 超时法
        如果一个事务等待时间超过了规定的时间,就认为发生里死锁
        缺点:一是有可能误判;二是若时间设置太长,死锁发生后不能及时发现
      • 等待图法
        事务等待图是一个有向图G=(T,U),T为结点集合,u为边集合,若事务T1等待T2,则画一条由T1指向T2的边
        并发控制子系统周期性的生成事务等待图,并进行检测,如果发现图中存在回路,则表示系统中出现里死锁
    • 死锁解除
      通常采用的方法是选择一个处理死锁代价最小的事务,将其撤销,释放此事务持有的所有锁,当然,对撤销的事务所做的数据修改操作必须恢复

2. 时间戳

给每一个事务盖上一个时标,即事务开始执行的时间,每个事务具有唯一的时间戳,如果发生冲突操作,就回滚具有较早时间戳的事务,以保证其他事务的正常执行,被回滚的事务被赋予一个新的时间戳并从头开始执行

3. 乐观控制法

乐观控制法认为很少发生冲突,一次不对事务进行特殊的管制,而是让他自由执行,事务提交前再进行正确性检查,如果检查后发现该事务出现过冲突,则拒绝执行并回滚

4. 多版本并发控制

版本是指数据对象的一个快照,记录数据对象某个时刻的为状态。

有一个数据对象A有两个事务,T1是写事务,T2是读事务,先启动T1后启动T2,T1在写A时,为A生成一个新的版本A‘,那么T2就可以继续在T1上执行,,T2提交的时候要先检查T1是否完成,如果T1已完成则T2可以提交,否则T2等待直到T1完成。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值