没有合适的资源?快使用搜索试试~ 我知道了~
MySQL原理和优化实战
资源推荐
资源详情
资源评论
MySQL实战优化 ( 儒猿IT学习网 讲师: 若白 )
MySQL优化实战
课程介绍
必备基础知识
MySQL软件下载和安装(建议版本5.7.28)
熟悉MySQL工具和基本SQL操作
熟悉MySQL基础知识(主外键约束的使用、SQL的基础用法等)
熟悉索引的使用和事务的基本概念
课程内容
MySQL InnoDB存储引擎原理与缓存组件参数优化实战
MySQL索引存储原理与索引优化实战
MySQL事务和锁工作原理、事务优化及锁优化实战
MySQL的表设计原则与数据类型选择及其优化
第一章 InnoDB存储引擎原理与优化
从MySQL 5.5版本开始默认 使用InnoDB作为引擎,它擅长处理事务,具有自动崩溃恢复的特性,在日
常开发中使用非常广泛。
下面是官方的InnoDB引擎架构图,主要分为内存结构和磁盘结构两大部分。
Page页分类
BP的底层采用链表数据结构管理Page。在InnoDB访问表记录和索引时会在Page页中缓存,以后使用可
以减少磁盘IO操作,提升效率。
Page根据状态可以分为三种类型:
free page : 空闲page,未被使用
clean page:被使用page,数据没有被修改过
dirty page:脏页,被使用page,数据被修改过,页中数据和磁盘的数据产生了不一致
Page页如何管理
针对上面所说的三种page类型,InnoDB通过三种链表结构来维护和管理
1. free list:表示空闲缓冲区,管理free page
Buffer Pool的初始化过程中,是先向操作系统申请连续的内存空间,然后把它划分成若干个【控
制块&缓冲页】的键值对。
free链表是把所有空闲的缓冲页对应的控制块作为一个个的节点放到一个链表中,这个链表便称之
为free链表
基节点: free链表中只有一个基节点是不记录缓存页信息(单独申请空间),它里面就存放了free链
表的头节点的地址,尾节点的地址,还有free链表里当前有多少个节点。
磁盘加载页的流程:
1. 从free链表中取出一个空闲的控制块(对应缓冲页)。
2. 把该缓冲页对应的控制块的信息填上(例如:页所在的表空间、页号之类的信息)。
3. 把该缓冲页对应的free链表节点(即:控制块)从链表中移除。表示该缓冲页已经被使用了。
2.flush list: 表示需要刷新到磁盘的缓冲区,管理dirty page,内部page按修改时间排序。
InnoDB引擎为了提高处理效率,在每次修改缓冲页后,并不是立刻把修改刷新到磁盘上,而是在
未来的某个时间点进行刷新操作. 所以需要使用到flush链表存储脏页,凡是被修改过的缓冲页对应
的控制块都会作为节点加入到flush链表.
flush链表的结构与free链表的结构相似
注: 脏页即存在于flush链表,也在LRU链表中,但是两种互不影响,LRU链表负责管理page的可
用性和释放,而flush链表负责管理脏页的刷盘操作。
3.lru list:表示正在使用的缓冲区,管理clean page和dirty page,缓冲区以midpoint为基点,前面链
表称为new列表区,存放经常访问的数据,占63%;后面的链表称为old列表区,存放使用较少数据,
占37%
普通LRU算法
LRU = Least Recently Used(最近最少使用): 就是末尾淘汰法,新数据从链表头部加入,释放空间时
从末尾淘汰.
1. 当要访问某个页时,如果不在Buffer Pool,需要把该页加载到缓冲池,并且把该缓冲页对应的控制
块作为节点添加到LRU链表的头部。
剩余170页未读,继续阅读
资源评论
大伟攀高峰
- 粉丝: 381
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功