查询优化

数据库管理系统中非常重要的一部分。

代数优化

按照一定的规则将语句变化成关系代数以后进行优化

操作优化

对代数优化后的查询树使用比较好的方法进行查询。
主要是对连接运算进行优化

  • 嵌套循环
  • 归并扫描
  • 索引优化
  • 哈希连接

恢复机制

备份(完整备份+差异备份)+日志

事务

  • 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 list Active list Operation
No Yes undo,delete TID from active list
Yes Yes delete TID from active list
Yes No nothing 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 list Active list Operation
No Yes delete TID from active list
Yes Yes redo, delete TID from active list
Yes No nothing 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 list Active list Operation
No Yes undo, delete TID from active list
Yes Yes redo, delete TID from active list
Yes No nothing to do
总结
redo undo
A.I->DB before commit No Yes
A.I->DB after commit Yes No
A.I->DB concurrently commit Yes Yes
异地更新(有缺点,没有被推广) No No

并发控制

并发:支持多个事务同时访问数据库
原因:

  • 改善系统的利用率
  • 不同的事务很可能访问的是不同的数据,互不冲突

并发控制:对事务的并发运行加以管理

任意并发的后果:

  • 丢失更新:写-写冲突
  • 读脏数据->恢复时的多米诺现象:写-读冲突
  • 不可重复的读:读-写冲突

可串行化:并发运行事务以后的结果如果和某种串行运行的结果相同,则说这种并发运行是可串行化的,即是正确的。

如果用户把一些事务同时提交并发运行,则要求这些事务谁先运行后运行是无所谓的,即默认所有可串行化的结果都是正确的。

并发控制策略

通过并发控制使得并发事务的运行是可串行化的

封锁法

通过锁对事务强行串行化

  • X锁协议(排他锁)

定义1:在一个事务里面,如果所有的加锁请求都在锁释放之前,称这个事务是一个两阶段事务,符合两阶段加锁协议。(增长阶段-缩减阶段)
定义2:先得到锁再访问数据对象,那么这个事务就是well-formed(合式的)
定义:如果每个事务是合式的两阶段事务,那么这些事务一定是可串行化的。
如果事务是合式的并且是两阶段事务,并且在事务结束的时候释放更新锁,那么这个事务是可串行化的、可恢复的。不会出现恢复的时候的多米诺效应
如果在事务结束的时候释放所有的锁,那么称这个事务满足严格的两阶段加锁协议。

NL X
NL Y Y
X Y N

数据库效率比较低。

  • SX锁协议
    S(hare) lock :如果是读操作
    X lock:如果是更新操作
NL S X
NL Y Y Y
S Y Y N
X Y N N
  • S(share)U(update)X locks
NL S U X
NL Y Y Y Y
S Y Y Y N
U Y Y N N
X Y N N N

系统的并发度较高。

死锁/活锁(饥饿)

活锁/饥饿:优化调度策略

死锁:
  • 防:防止出现死锁
  • 治:出现死锁以后能够解决死锁。
治:
  • 当事务获得锁以后的等待时候超过一个限度以后就判定已经发生了死锁,就重启事务。对于时间的设置影响系统的运行效率
  • 构造等待图
    节点:等待的事务
    边:等待关系
    如果在等待图里面出现环就说明出现死锁。

检查时机:每次出现新的等待关系的时候/周期检查
解决方法:选择一个牺牲者(目前拥有锁最小的/滚回代价最小的事务)。然后等待环路上的其他事务都运行结束以后再运行该事务。

操作系统中的解决方案:

  • 检查所需要的所有资源
  • 给资源进行排序

在数据库系统中不现实

多粒度加锁

  • 一旦遇到得不到锁就终止,不等待就不会死锁
  • 事务重试:给每一个事务安排一个时间戳
    • 当作TID
    • 比较两个事务的年龄

等待死亡协议
如果Ta需要申请一个锁,这个锁已经被Tb占领了:

  • 如果Ta比Tb年老,则Ta进行等待
  • 如果Ta比Tb年轻,则自己终止,然后自动重新运行(以原来的时间戳)

因此不可能重现循环等待,解决了死锁和活锁问题
受伤等待协议
如果Ta需要申请一个锁,这个锁已经被Tb占领了:

  • 如果Ta比Tb年轻,则Ta进行等待
  • 如果Ta比Tb年老的话,则将Tb终止

数据库原理及应用【四】数据库管理系统相关推荐

  1. 数据库原理(十 四)- 数据库的实施和维护

    数据库原理(十 四)- 数据库的实施和维护 前言 数据的载入和应用程序的调试 数据库的试运行 数据库的运行和维护 借鉴 前言 完成数据库的物理设计之后,设计人员就要对数据库系统进行实施和试运行,在试运 ...

  2. 数据库原理(一)- 数据库系统概述

    数据库原理(一)- 数据库系统概述 四个基本概念 数据 数据库 数据库管理系统 数据库系统 四个概念的关系 数据管理技术的产生和发展 人工管理阶段 文件管理阶段 数据库系统阶段 三个阶段的比较 数据库 ...

  3. 数据库原理分析(第四版)

    计算机科学之数据库原理及应用教程之我见(第四版) 信息.数据.数据处理与数据管理 信息的定义:信息是人脑对现实世界事物的存在方式.运动状态以及事物之间联系的抽象反应,信息是客观存在的,人类有意识对信息 ...

  4. mysql数据库原理及设计_MySQL数据库原理、设计与应用

    内容简介 本书是面向MySQL数据库初学者推出的一本入门教材,以通俗易懂的语言.丰富实用的案例,详细讲解了MySQL的开发和管理技术. 全书共12章.第1章讲解了数据库基本概念和MySQL的安装步骤: ...

  5. mysql数据库原理实验报告_数据库原理实验报告(Mysql).doc

    数据库原理实验报告(Mysql).doc 实验项目列表 序号实验项目名称指导教师1实验一 数据库的定义实验(验证性)2实验二 数据库的建立和维护实验(验证性)3实验三 数据库的查询实验(验证性)4实验 ...

  6. 【数据库原理实验(openGauss)】数据库的备份与恢复

    数据库的备份与恢复 文章目录 数据库的备份与恢复 一.物理备份和恢复 实验准备: (1)物理备份 (2)物理备份恢复 二.逻辑备份和恢复 实验准备: (1)gs_dump备份 1.gs_dump备份示 ...

  7. 【数据库原理与应用】数据库应用实例— 教学管理系统

    目录 一.教学管理系统简介 二.如果要设计开发该教学管理系统,需要考虑那些问题呢?

  8. 【数据库原理及应用】——数据库设计(学习笔记)

  9. 【数据库原理及应用】——数据库系统结构和组成(学习笔记)

  10. 【数据库原理实验(openGauss)】实验报告

    <数据库系统原理实验>报告 文章目录 <数据库系统原理实验>报告 一.实验课程性质和教学目标 二.实验课程教学基本要求 三.实验教学内容 实验一 认识DBMS系统 (一)实验目 ...

最新文章

  1. 区块链应用 | 不知道什么时候起,满世界都在谈区块链的事情
  2. ORA-09817:Write to audit file failed
  3. Codeforces Beta Round #16 (Div. 2 Only)【未完结】
  4. C++ 中const的用法,特别是用在函数前面与后面的区别!
  5. 第五十七期:小型企业将如何从5G中受益
  6. iOS HTML标签字符实体,转译字符串归类大全 【转载】
  7. Office - 安装程序找不到office.zh-cn\*.文件
  8. Linux分页错误,Linux-x86_64Error:28:Nospaceleftondevice问题
  9. linux下java基于UDP编程聊天_基于Linux下的UDP编程
  10. 售价150万的“AI老婆”,上市仅1小时就被抢光
  11. EC读书笔记系列之18:条款47、48
  12. dispimg函数怎么用_excel中的lookup函数究竟该怎么用?如何才能准确理解它的用法?...
  13. JavaScript中atEnd函数
  14. 【微信小程序模板直接套用】微信小程序制作模板套用平台
  15. 构建自己的Aleax查询服务
  16. 邓侃:中国首个全过程智能诊疗系统,全方位披露技术核心和商业模式
  17. “本是青灯不归客,却因浊酒留风尘,星光不问赶路人,岁月不负有心人”,你是怎么理解的?
  18. MongoDB 极简实践入门
  19. Excel插入图表失真(数据格式原因)修复笔记
  20. 市场调研很难做?这些软件帮你理清思绪

热门文章

  1. 浏览器滚动条样式更改
  2. python模块;opencv安装
  3. fortran语法笔记
  4. MySQL数据库安全配置
  5. Terrafugia希望在今年夏天带来真正可飞的Airplane
  6. java web转码_javaweb后台转码
  7. promise将ajax变为同步,ES6-Promise改造异步请求为同步
  8. 批量删除html网页,批量删除.html · panghuamama/Clearly Local - Gitee.com
  9. c语言程序源代码_程序的编译、链接和执行
  10. NXP UWB NCJ29D5开发(一)环境搭建