博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《MySQL技术内幕:InnoDB存储引擎》读书笔记
阅读量:6501 次
发布时间:2019-06-24

本文共 861 字,大约阅读时间需要 2 分钟。

hot3.png

1.InnoDB中每一页的大小默认为16kb,但是其也支持压缩页的功能,即将原本16kb的页压缩为1kb、2kb、4kb和8kb。当需要从缓存池中申请4kb大小的页时,MySQL的申请步骤如下:

  • 检查4kb的unzip_LRU列表,检查是否有可用的空闲页;
  • 若有,则直接使用;
  • 否则,检查8kb的unzip_LRU列表;
  • 若能够得到空闲页,则分解为2个4kb的页,并且存放到4kb的unzip_LRU列表;
  • 若不能得到空闲页,就从LRU列表中申请一个16kb的页,将其分解为1个8kb和2个4kb的页,并且存放到对应的unzip_LRU列表中。

2.当LRU列表中的页被修改之后,其数据就和磁盘上的数据产生了不一致,这种页被称为脏页,此时数据库会根据checkpoint机制将脏页刷新到磁盘中,脏页不仅存在于LRU列表中,也存在于FLUSH列表中,FLUSH列表中的数据是专门用来管理将数据刷新到磁盘中的。

3.在下列三种情况下重做日志会将重做日志缓冲中的内容刷新到重做日志文件中:

  • master thread每一秒将重做日志缓冲刷新到重做日志文件;
  • 每个事务提交时会将重做日志缓冲刷新到重做日志文件;
  • 当重做日志缓冲池剩余空间小于1/2时,重做日志缓冲刷新到重做日志文件。

4.为了避免数据丢失的问题,事务数据库都采用了write ahead log机制,也就是当事务提交时,存储引擎先将数据写入到重做日志中,然后再修改页中的数据,当数据库发生宕机时,可以通过重做日志来恢复数据。

5.为了协调CPU的处理速度与磁盘的读写速度之间的不匹配问题,MySQL采用了缓冲池来解决这个问题,当发生数据读写时,其都是先将数据写入到缓冲池中,然后通过checkpoint技术将数据写入到磁盘中。

6.checkpoint技术所解决的问题:

  • 缩短数据库的恢复时间;
  • 缓冲池不够用时,将脏页刷新到磁盘;
  • 重做日志不可用时,刷新脏页。

转载于:https://my.oschina.net/zhangxufeng/blog/1526684

你可能感兴趣的文章
获取BT节点信息bittorrent-discovery
查看>>
环形动画加载视图AnimatedCircleLoadingView
查看>>
Centos 7使用vsftpd搭建FTP服务器
查看>>
tcpdump抓包文件提取http附加资源
查看>>
linux下SVN不允许空白日志提交
查看>>
第2周第1课
查看>>
docker制作镜像篇(基于容器)
查看>>
山寨c 标准库中的getline 函数
查看>>
shell时间
查看>>
pfSense book之2.4安装指南
查看>>
org.springframework.data.redis 一次连接获取特定key所有k-v(pipeline)
查看>>
[译稿]同步复制提议 2010-09
查看>>
windows 自动化目录大纲(各企业架构不一样,按需选择)
查看>>
我的友情链接
查看>>
【Visual C++】游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理
查看>>
我的友情链接
查看>>
Java 使用 Redis
查看>>
JPA常用注解
查看>>
Java基础学习总结(1)——equals方法
查看>>
Maven学习总结(6)——Maven与Eclipse整合
查看>>