如何建学校网站,html网站地图制作,网站建设的一些原理,响应式网站用什么单位查询优化
数据库管理系统中非常重要的一部分。
代数优化
按照一定的规则将语句变化成关系代数以后进行优化
操作优化
对代数优化后的查询树使用比较好的方法进行查询。 主要是对连接运算进行优化
嵌套循环归并扫描索引优化哈希连接
恢复机制
备份#xff08;完整备份差…查询优化
数据库管理系统中非常重要的一部分。
代数优化
按照一定的规则将语句变化成关系代数以后进行优化
操作优化
对代数优化后的查询树使用比较好的方法进行查询。 主要是对连接运算进行优化
嵌套循环归并扫描索引优化哈希连接
恢复机制
备份完整备份差异备份日志
事务
A原子性C保持一致性I隔离性D持久性
事务的特性由DBMS负责维护因此对于需要使用事务来进行执行的SQL语句我们要定义在事务中。
如果没有显式地创建事务那么DBMS会把每一条语句当作一个事务。
恢复信息
日志存储在非挥发存储器中。
Commit list已经提交的TID的列表Active list进程中的TID列表Log更新前和更新后的信息。存储的是修改前后的物理块的值
提交(commit)规则在提交事务之前修改后的数据A.I必须写到非挥发存储器中
先记后写(log ahead)规则在修改数据前必须把被修改数据的旧值B.I写到日志中
操作
还原undo重做redo 这两种操作具有幂等性一次和和好多次是相等的
更新策略
A.I-DB before commit
TID-active list … B.I-Log A.I-DB … TID-commit list delete TID from active list 如果发生故障会启动重启动恢复检查TID目前所处的状态
Commit listActive listOperationNoYesundo,delete TID from active listYesYesdelete TID from active listYesNonothing to do
为了避免每次检查都需要检查所有的TID使用检查点。 检查点(check point)运行一段时间以后进行一次检查并且设立一个检查点。每次检查检查上一次检查点以后的TID
A.I-DB after commit
TID-active list … A.I - Log … TID-commit list ALL:A.I - DB delete TID from active list
重启动恢复
Commit listActive listOperationNoYesdelete TID from active listYesYesredo, delete TID from active listYesNonothing to do
这种策略的并发度更高。可以推迟加排他锁的时间。
A.I - DB concurrently with commit
TID - active list … A.I,B.I - log … A.I-DB(partially done by 后台进程 when hard disk is free) … TID-commit list A.I-DB(completed) delete TID from active list
重启动恢复
Commit listActive listOperationNoYesundo, delete TID from active listYesYesredo, delete TID from active listYesNonothing to do
总结
redoundoA.I-DB before commitNoYesA.I-DB after commitYesNoA.I-DB concurrently commitYesYes异地更新(有缺点没有被推广)NoNo
并发控制
并发支持多个事务同时访问数据库 原因
改善系统的利用率不同的事务很可能访问的是不同的数据互不冲突
并发控制对事务的并发运行加以管理
任意并发的后果
丢失更新写-写冲突读脏数据-恢复时的多米诺现象写-读冲突不可重复的读读-写冲突
可串行化并发运行事务以后的结果如果和某种串行运行的结果相同则说这种并发运行是可串行化的即是正确的。
如果用户把一些事务同时提交并发运行则要求这些事务谁先运行后运行是无所谓的即默认所有可串行化的结果都是正确的。
并发控制策略
通过并发控制使得并发事务的运行是可串行化的
封锁法
通过锁对事务强行串行化
X锁协议排他锁
定义1在一个事务里面如果所有的加锁请求都在锁释放之前称这个事务是一个两阶段事务符合两阶段加锁协议。增长阶段-缩减阶段 定义2先得到锁再访问数据对象那么这个事务就是well-formed合式的 定义如果每个事务是合式的两阶段事务那么这些事务一定是可串行化的。 如果事务是合式的并且是两阶段事务并且在事务结束的时候释放更新锁那么这个事务是可串行化的、可恢复的。不会出现恢复的时候的多米诺效应 如果在事务结束的时候释放所有的锁那么称这个事务满足严格的两阶段加锁协议。
NLXNLYYXYN
数据库效率比较低。
SX锁协议 S(hare) lock 如果是读操作 X lock如果是更新操作
NLSXNLYYYSYYNXYNN
S(share)U(update)X locks
NLSUXNLYYYYSYYYNUYYNNXYNNN
系统的并发度较高。
死锁/活锁饥饿 活锁/饥饿优化调度策略
死锁
防防止出现死锁治出现死锁以后能够解决死锁。
治
当事务获得锁以后的等待时候超过一个限度以后就判定已经发生了死锁就重启事务。对于时间的设置影响系统的运行效率构造等待图 节点等待的事务 边等待关系 如果在等待图里面出现环就说明出现死锁。
检查时机每次出现新的等待关系的时候/周期检查 解决方法选择一个牺牲者目前拥有锁最小的/滚回代价最小的事务。然后等待环路上的其他事务都运行结束以后再运行该事务。
防
操作系统中的解决方案
检查所需要的所有资源给资源进行排序
在数据库系统中不现实
多粒度加锁
一旦遇到得不到锁就终止不等待就不会死锁事务重试给每一个事务安排一个时间戳 当作TID比较两个事务的年龄
等待死亡协议 如果Ta需要申请一个锁这个锁已经被Tb占领了
如果Ta比Tb年老则Ta进行等待如果Ta比Tb年轻则自己终止然后自动重新运行以原来的时间戳
因此不可能重现循环等待解决了死锁和活锁问题 受伤等待协议 如果Ta需要申请一个锁这个锁已经被Tb占领了
如果Ta比Tb年轻则Ta进行等待如果Ta比Tb年老的话则将Tb终止