主页 > 知识库 > 详解 MySQL的FreeList机制

详解 MySQL的FreeList机制

热门标签:铁路电话系统 Linux服务器 呼叫中心市场需求 AI电销 服务外包 网站排名优化 百度竞价排名 地方门户网站

一、前言

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,其次缓存页中的数据可能是已经被修改了的脏数据。

以上就是详解 MySQL的FreeList机制的详细内容,更多关于MySQL FreeList机制的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
  • windows下MySQL5.6版本安装及配置过程附有截图和详细说明
  • Mysql字符串截取函数SUBSTRING的用法说明
  • MySQL创建用户与授权方法
  • mysql 添加索引 mysql 如何创建索引
  • 超详细mysql left join,right join,inner join用法分析
  • mySQL中replace的用法
  • Mysql查看版本号的几种方式
  • Mysql命令行导入sql数据
  • Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
  • MySQL数据库远程连接开启方法

标签:湖南 湘潭 仙桃 铜川 兰州 衡水 黄山 崇左

巨人网络通讯声明:本文标题《详解 MySQL的FreeList机制》,本文关键词  ;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 收缩
    • 微信客服
    • 微信二维码
    • 电话咨询

    • 400-1100-266