第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


例子


浙公网安备 33010602011771号