【从零开始的数据库学习】十一.并发控制

需要并发的原因

有多个事务需要对数据库进行访问,如果是依照次序来的话,会造成资源浪费(比如事务1不需要cpu,但是事务2需要cpu,这时候先等事务1 完成,再去处理事务2,那在处理事务1 的过程中,cpu这个资源就被浪费了)


并发控制会出现的问题

这里将对事务A读简写成 R(A),对事务A写简写成W(A)。
1. 丢失数据
2. 不可重复读
3. 读脏数据
在这里插入图片描述


解决方式

使用封锁协议
一共有三种封锁协议
1. 一级封锁协议
2. 二级封锁协议
3. 三级封锁协议
在这里插入图片描述
具体的在 P313-314

活锁和死锁

定义
活锁:略 ——>其解决办法是采取先要求,先进行的策略(类似于队列)
死锁:略 ——>其解决办法在下面,比较复杂
(在书P315上)

死锁的解决办法
(1)一次封锁
  做法:要求每个事务一次将所有要使用的数据全部加锁
  缺点:降低了并发性
(2)顺序封锁
  做法:预先对数据对性规定一个封锁顺序(如在B树结构的索引中,从根节点逐级往下封锁)
  缺点:维护困难

由上可知,对于死锁,封锁方法不太适合数据库,大多数数据库使用死锁的诊断和解除


死锁的诊断和解除

(1)超时法
  做法:认为如果一个事务等待的时间,就是发生了死锁
  缺点:可能会误判,如果设定的等待时间阈值过大,还可能不能及时发现死锁
(2)等待图法
  做法:画图
在这里插入图片描述
在这里插入图片描述

再往后不涉及考试范围,我不写力~

猜你喜欢

转载自blog.csdn.net/weixin_44062380/article/details/107011593
今日推荐