Hi,大家好!我是白日梦!

今天我要跟你分享的MySQL话题是:“了解InnoDB的FreeList吗?谈谈看!”

本文是MySQL专题的第 7 篇,共110篇。

一、回顾

前面几篇文章白日梦和你分享了,我们从磁盘中读取出来的数据页以缓存页和描述信息的方式组织在Buffer Pool中。

MySQL启动后,BufferPool就会被初始化,在你没有执行任何查询操作之前,BufferPool中的缓存页都是一块块空的内存,未被使用过也没有任何数据保存在里面。

而且你也知道了通过缓冲页的描述信息可以直接且唯一的找到它所指向的缓存页。

那你有没有想过,我们从磁盘里面读取出来的 数据页 应该放到那个缓冲页中去呢?

这个问题就引出了Free List。

二、Free List

其实Free List是Buffer Pool中基于缓存页描述信息 组织起来的双向链表。换言之,Free List中的每一个结点都是缓存页对应的描述信息。并且通过描述信息可以找到指定的缓存页(缓存页)

InnoDB设计Free List的初衷就是为了解决上面说的问题。

如果这个缓存页中没有存储任何数据,那么它对应的描述信息就会被维护进Free List中。这时当你想把从磁盘中读取出一个数据页放入缓存页中的话,就得先从Free List中找一个节点(Free List中的所有节点都会指向一个从未被使用过的缓存页),那接着就可以把你读取出来的这个数据页放入到该节点指向的缓存页中。

相应的:当数据页中被放入数据之后。它对应的描述信息块会被从Free List中移出。

三、如何判断数据页有没有在缓存中?

你会不会纳闷MySQL怎么知道刚读取出来的这个数据页有没有在缓存页中呢?

这个功能的实现依托于另一个数据结构:hash table

key = 表空间号+数据页号

value = 缓存页地址

如果存在于hash table中,那就说明该数据页已经存在于Buffer Pool中了,优先使用Buffer Pool中的缓存页。相信你肯定能想到为啥优先使用Buffer Pool中的缓存页吧!首先免去了磁盘的随机IO,其次缓存页中的数据可能是已经被修改了的脏数据。

四、推荐阅读

1、谈谈MySQL中基数是什么?

2、聊聊什么是慢查?如何监控?如何排查?

3、对Not Null字段插入Null值有啥现象?

4、能谈谈year、date、datetime、time、timestamp的区别吗?

5、你有没有搞混查询缓存和Buffer Pool?谈谈看!

6、你知道数据库缓冲池中的LRU-List吗?

关注送书!《Netty实战》

文章公号号首发!连载中!关注微信公号回复:“抽奖” 可参加抽

一看就懂的MySQL的FreeList机制相关推荐

  1. 一看就懂的MySQL教程

    一看就懂的MySQL教程 一.安装 二.卸载 三.配置 1.MySQL服务启动 2.MySQL登录 3.MySQL 退出 四.SQL 1.什么是SQL 2.SQL通用语法 3.SQL分类 1)DDL ...

  2. 一篇高中生都能看懂的MySQL入门博客(长文)

    写在前面: 本篇博客共一万五千字左右,是我自己对MySQL进行重新学习时写的,是一些偏基础的东西. 如果你对MySQL足够的了解,本篇博客最多只能起一个查漏补缺的作用. 博客的主要面向对象为:想学习了 ...

  3. 面试让HR都能听懂的MySQL锁机制,欢声笑语中搞懂MySQL锁

    腾讯云数据库负责人林晓斌说过:"我们面试MySQL同事时只考察两点,索引和锁".言简意赅,MySQL锁的重要性不言而喻. 本文通过同事"侨总"的一场面试,带你通 ...

  4. python星座转换程序代码_0009 如何编写程序计算所属星座,一看就懂

    原标题:0009 如何编写程序计算所属星座,一看就懂 这节课,仍然是复习input输入和if判断的用法,要做一个根据输入月份和日期输出是什么星座的程序. 先来做一下上节课的练习: 输入数字1-7判断是 ...

  5. c++ 结构体赋值_《零基础看得懂的C语言入门教程》—(十二)结构体是这么回事

    一.学习目标 了解C语言的结构体的使用方法 了解C语言结构体的结构的赋值 了解多种C语言结构体变量的赋值方法和取值方法 目录 <零基础看得懂的C语言入门教程>--(二)简单带你了解流程 & ...

  6. 前端app调起摄像头 只显示在页面_猫也能看得懂的教程之一分钟使用Vue搭建简单Web页面...

    本教程适合人群: 已经了解过过html.js.css,想深入学习前端技术的小伙伴 有前端开发经验.但是没有使用过Vue的小伙伴 有过其他编程经验,对前端开发感兴趣的小伙伴 学习本教程之后你将会: 了解 ...

  7. python爬虫简单实例-最简单的Python爬虫案例,看得懂说明你已入门,附赠教程

    原标题:最简单的Python爬虫案例,看得懂说明你已入门,附赠教程 这是最简单的Python爬虫案例,如果你能看懂,那么请你保持信心,因为你已经入门Python爬虫,只要带着信心和努力,你的技术能力在 ...

  8. mysql+数据库连接标识_新人必看!连接到MySQL数据库的两种方法

    原标题:新人必看!连接到MySQL数据库的两种方法 使用mysql二进制方式连接 您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库. 实例 以下是从命令行中连接mysq ...

  9. python程序员搞笑段子_程序员才能看得懂的段子,内含表情包,吃饭的时候别点!...

    原标题:程序员才能看得懂的段子,内含表情包,吃饭的时候别点! 很多网友都认为程序员必定是非常古板,整天只会敲键盘的码农.其实这种看法是非常片面的.真正优秀的程序员,不仅精通程序的编写,还是某些领域的专 ...

最新文章

  1. SAP MM '独立/集中'等于1的MTS物料MRP运行后合并需求触发PR
  2. 大多数日志文件的后缀名是_编程小短文:find,让你随心所欲查找整块磁盘的任意文件...
  3. mysql数据库导出模型到powerdesigner,PDM图形窗口中显示数据列的中文注释
  4. Nacos客户端配置
  5. Anaconda安装tensorflow遇到的wrapt、load error、Twisted问题
  6. underscore.js 源码分析5 基础函数和each函数的使用
  7. Gstreamer调用pulseaudio播放流程(十三)
  8. (附源码)springboot通用数据展示系统 毕业设计 200934
  9. 基于go语言的牛牛游戏服务器搭建
  10. 购买台式计算机的群体,电脑市场定位和目标消费者分析
  11. matlab-梯形积分
  12. 【深度学习】DCGAN实现动漫头像生成详细说明
  13. java实现-强智教务系统API文档-全部java封装
  14. 一个屌丝程序猿的人生(五十三)
  15. 对图像处理中的面向对象和基于基元的理解
  16. SAP FICO顾问心得
  17. RabbitVCS:ubuntu下svn可视化工具的安装和使用
  18. 11.使用boostregex遭遇无法打开libboost_regex-vc120-mt-sgd-1_62.lib的问题
  19. python print 字体大小,Python-更改打印控制台字体系列/样式
  20. 【AI Studio】飞桨图像分类零基础训练营 - 01 - 图像处理基本概念

热门文章

  1. 【Java学习记录】九 Java中的“==”和equal
  2. 各种信息学竞赛的含金量
  3. 微软又放大招!网友:这也太猛了...
  4. 初中计算机试题戏曲进校园,【校园通讯】“戏曲进校园”走进东街学校,春风化新雨,戏曲百媚生!...
  5. 微信自带群发功能在哪?如何解决200上限?一文详解!
  6. 吐槽memoQ | 我想用机器翻译!
  7. 【项目实战课】人人免费可学,基于Pytorch的BCNN鸟类细粒度图像分类实战
  8. 中国智能家居设备行业竞争策略展望分析及投资战略规划研究报告2022-2028年
  9. 数据的异质性是什么意思?
  10. 生产环境安装centos7系统教程(组装服务器)