数据库概论系统—系统篇
一、关系查询处理和查询优化
1.1关系数据库的查询处理
查询处理可分为四个阶段:查询分析、检查检查、查询优选和查询执行(其中查询优化可分为代数和物理优化)
1.2关系数据库系统的查询优化
查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较高的效率,而且在于系统可以比用户程序“优化”做的更好
会将建立原始树,并能够将其转化为优化查询树
二、数据库恢复技术
2.1事务
2.1.1事务的基本概念
事务:是用户定义的一个数据库操作序列,要不全做,要不全不做,是一个不可分割的工作单位(是数据库恢复和并发控制的基本单位)
- 一般来书,一个程序中包含多个事务(事务,程序两个概念)
COMMIT:提交,即提交事务的所有操作
ROLLBACK:回滚,即撤销该事务完成的操作,回滚到事务开始状态
2.1.2事务的ACID准则
原子性,一致性(正确性),隔离性和持续性
2.2故障的种类(处理非预期的)
- 事务内部的故障:此处专指非预期的故障
- 系统故障:是指造成系统停止运行的任何事件,使得系统要重新启动,不破坏数据数。故障时,正在进行的事务会撤销,已完成的在缓存区的事务要重做
- 介质故障:又叫做硬故障,破坏最大
- 计算机病毒
2.3恢复的实现技术
数据库恢复的原理十分简单:建立冗余—数据转储和建立日志文件
2.3.1数据转储
- 静态转储:系统停止事务进行转储。期间不能操作数据库
- 动态转储:转储和事务并发操作。但是数据会过时,一般的情况一个完整的副本 = 转储 + 日志文件
- 还有海量和增量转储
2.3.2日志文件
-
登记的次序严格按照并发事务执行的时间次序
-
先写日志文件,再写数据库
2.4恢复策略
-
事务故障恢复:利用日志文件撤销。反向扫描,进行逆操作,知道读到事务的开始标记
-
系统故障恢复:先站队列,正向扫描日志,有开始和提交->重做;只有开始->撤销;有开始和回滚->什么也不去。再对撤销队列中的事务进行撤销操作(见上)
-
介质故障恢复:重装数据库然后重做已完成的事务(管理员接入)
2.5具有检查点的恢复技术
再日志文件中加入新记录—检查点记录,增加一个重新开始文件。让恢复子系统在登录日志文件期间动态维护日志。
- 建立检查点时刻所有正在执行的事务清单
- 这些事务最近一个日志记录的地址(正在进行中开始最早的)
2.6数据库镜像
处理介质故障,是提高数据库可用性的解决方案,提高并发性的办法
正常运行时,主盘自动复制到副盘;发生故障后副盘晋升为主盘并自动复制到新的副盘上。
三、并发控制
事务是并发控制的基本单位
3.1并发的概述
并发控制的目的是为了保证事务的隔离性和一致性
并发操作有可能会带来丢失修改,不可重复读,读"脏数据"的问题
针对上述的问题采取了各种方法
3.2封锁
事务T对某个数据对象操作前,像系统发出申请,对其加锁,加锁后事务会对数据有一定的控制
- 排他锁、写锁、X锁:只允许读取和修改,其他事务不能对其加任何锁,直到释放
- 共享锁、读锁、S锁:可以读但不能修改,其他事务可以对其加S锁
3.3封锁协议
- 一级封锁:事务T修改前+X锁,直到事务结束才释放
- 二级封锁:在一级的基础上,事务T读前+S锁,读完释放
- 三级封锁:在一级的基础上,事务T读前+S锁,直到事务结束才释放
不同级别的封锁可解决不同的问题
3.4活锁和死锁
3.4.1活锁
事务有了优先级,会插队 =>先来先服务
3.4.2死锁
事务之间形成闭环
- 死锁的预防
一次封锁法:一次将所有使用数据全部枷锁
顺序封锁法:预先对数据对象排序
- 死锁的诊断与解除
超时法:规定等待时间,若超过等待时间,则认为是死锁
等待图法:选择代价最小的一个事务撤销
3.5并发调度的可串行性(了解)
3.5.1可串行化调度
多个事务并发是正确的<=>其结果与某一次串行执行的结果相同,即为可串行化调度
3.5.2冲突可串行化调度
冲突可串行化调度是可串行化的充分条件
只有对同一个数据的读写和写写会产生
- 已知调度,判断是否冲突
1.画有向图(T,E) T:为事务个数;E:若Ri/Wi/Wi(x)在Wi/Ri/Wi(X)前则TIi—Tj
2.若有回路,则不是冲突可串行化调度;反之是
3.若为冲突可串行化调度,找一个入度为0的事务将其以及和其相连的边删去,再找一个入度为0的事务...重复
4.最后按照原调度顺逆顺序对每个事务内部进行排序
3.6两段锁协议
事务分成两个阶段对数据项进行加锁和解锁
- 获得封锁(扩展阶段):事务申请获得任何数据项上任何类型的锁
- 释放封锁(收缩阶段):事务释放任何数据项上任何类型的锁
注:遵循两段锁是可串行的充分条件。遵循两段锁也可能出现死锁
3.7封锁的粒度
封锁粒度,即封锁对象的大小(逻辑单元,数据库,元组...)
- 封锁粒度越大,数据库能封锁的数据单元越少,并发度就越小,开销小
- 封锁粒度越小,数据库能封锁的数据单元越多,并发度就越高,开销大
3.7.1多粒度封锁
多粒度封锁允许每个结点被独立地i加锁。多粒度封锁中的锁有向下继承关系
检查一个数据是否可以加锁:先检查自己,再看上下级的数据结点
3.7.2意向锁
如果对一个结点加意向锁,则说明该锁下层正在被加锁;对任一结点加锁,其上层结点都要加意向锁。可以提高检查效率
三种意向锁文章来源:https://uudwc.com/A/bzwOR
- 意向共享锁(IS锁):若对结点+S锁,则上层结点+IS锁
- 意向排他锁(IX锁):若对结点+X锁,则上层结点+IX锁
- 意向共享排他锁(SIX锁):若对结点+SIX锁,则它对同一个下结点+S和X锁(对同一个数据又读又修改,不排他)![1685974462931]
注意:是否排他是对不同的事务来说文章来源地址https://uudwc.com/A/bzwOR