第3部分:关系数据库管理系统原理part3
第11章:并发控制
要求
-
准确掌握基本概念
-
熟练判断调度是否冲突等价,是否为冲突可串⾏化调度
-
熟练运⽤两阶段锁协议和锁管理器的原理来产⽣并发事务调度
-
熟练判断是否产⽣死锁
事务:
-
事务的定义、事务的表示、事务的ACID性质
事务的定义
事务的表示
事务的ACID性质
-
原子性:全部或者不执行
-
一致性:事务成功执行,数据库的规则不会被违反
-
隔离性:不受干扰
-
持久性:永久写入
原子性
持久性
一致性
隔离性
事务和DBMS的联系
调度:
-
调度的定义、串⾏调度、⾮串⾏调度、可串⾏化调度、冲突、冲突等价、冲突可串⾏化调度、冲突可串⾏化调度的判定⽅法
调度的定义
-
事务的序列就是调度
串行调度
非串行调度
调度的正确性分析
异常
脏写
-
一个事务在提交之前,被另一个事务修改同一个属性值(污染了写的属性)
脏读
-
一个事务读取了另一个事务未提交的写入,读取了dirty的值
幻读
-
一项事务正在查找,别的事务插入了新的数据,这时第一个事务就会出现幻觉(发现没有被查询到的新事务);
不可重复读
-
读的第二变发现已经被修改了
等价调度
可串行化调度
隔离级别
读未提交
-
未提交的事务的修改被可见
读提交
-
已提交才能可见
-
提交后还是可能出现幻读和不可重复读
可重复读
可串行话
冲突可串行化
操作冲突的定义
写写冲突
写读冲突
读写冲突
-
写之前被读了
可串行化调度的判断
冲突等价
通过冲突等价判断
通过交换不冲突的对判断
-
交换两个不冲突的对
非冲突可串行化调度
可串行化调度的测试判定
基于锁的并发控制协议:
-
锁的作⽤、锁的类型(共享锁、互斥锁)、封锁协议、锁管理器(锁的兼容矩阵、锁的请求、锁的释放)、两阶段锁协议、死锁、死锁检测⽅法、死锁解除⽅法、死锁预防⽅法
并发控制协议
并发控制协议分类
锁的定义
锁的并发事务执行举例
锁的类型
锁的相容矩阵
共享锁和互斥锁的并发事务执行举例
-
任然可能有问题,加锁解锁有空隙,被人更改了
二阶段锁协议
-
先加锁再解锁
-
可能级联中止,一个终止其它都要终止(后面的读了一个写了个值)
-
可能死锁,一个请求A,有B锁;一个请求B,有A锁
级联中止
严格调度
强两阶段锁
-
最后才解锁
死锁的定义
死锁的处理
死锁检测
等待图
死锁的解除
死锁的预防
wait-Die规则
wound-wait规则
第12章:故障恢复
要求
-
准确掌握基本概念
-
熟练掌握Undo、Redo、Undo/Redo⽇志的原理
故障恢复:
-
故障的类型、故障恢复的作用
事务故障
系统故障
存储介质故障
数据库⽇志:
-
⽇志⽂件、⽇志记录、记录⽇志的规则
-
缓冲池是否覆盖到磁盘上的问题
关于steal
关于FORCE
四种缓冲池策略
-
系统运⾏时的⼯作过程、故障恢复时的⼯作过程
-
steal不管是不是提交,都写;no steal 已提交的才能写,缓冲区效率低
-
FORCE提交后才能写
-
NOFORCE 脏页直接写,无所谓,IO效率更高
NO-STEAL FORCE
-
缺点,缓冲区得很大
预写式日志
wal协议
WAL的分类
Undo⽇志:
-
系统运⾏时的⼯作过程、故障恢复时的⼯作过程
运行时的行为
故障恢复
从后往前扫描
Redo⽇志:
正常运行行为
steal 无所谓写不写
nosteal 只有提交了才能写
no force 无所谓顺序
force 一定要在提交之前写
故障恢复行为
从前往后扫描
Undo/Redo⽇志:
-
系统运⾏时的⼯作过程、故障恢复时的⼯作过程
谁都可能在前面
正常运行行为
故障恢复
检查点:
-
检查点的作⽤
检查点作用
Redo
-
找完整的
-
从bigin之后找到最后
undo
例子