详解 MySQL的FreeList机制

 更新时间:2020年11月25日 15:39:22   作者:赐我白日梦  
这篇文章主要介绍了MySQL的FreeList机制的相关资料,帮助大家更好的理解和使用MySQL 数据库,感兴趣的朋友可以了解下

一、前言

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机制的资料请关注脚本之家其它相关文章!

相关文章

  • MySQL 用 limit 为什么会影响性能

    MySQL 用 limit 为什么会影响性能

    对于小的偏移量,直接使用limit来查询没有什么问题,但随着数据量的增大,越往后分页,limit语句的偏移量就会越大,速度也会明显变慢,接下来文章就向大家介绍其的原由,感兴趣的小伙伴可参考下面文章具体内容
    2021-09-09
  • MySQL删除表的时候忽略外键约束的简单实现

    MySQL删除表的时候忽略外键约束的简单实现

    下面小编就为大家带来一篇MySQL删除表的时候忽略外键约束的简单实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • 用SELECT... INTO OUTFILE语句导出MySQL数据的教程

    用SELECT... INTO OUTFILE语句导出MySQL数据的教程

    这篇文章主要介绍了用SELECT... INTO OUTFILE语句导出MySQL数据的教程,是MySQL入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • Mysql报错Duplicate entry '值' for key '字段名'的解决方法

    Mysql报错Duplicate entry '值' for key '字段名&

    今天在使用数据库的过程中,发现一直报Duplicate entry '值' for key '字段名'的错误,所以下面这篇文章主要给大家介绍了关于Mysql报错Duplicate entry '值' for key '字段名'的解决方法,需要的朋友可以参考下
    2023-04-04
  • mysql不是内部命令的错误解决方案

    mysql不是内部命令的错误解决方案

    在本篇内容里小编给各位分享的是一篇关于mysql不是内部命令的错误解决方案,需要的朋友们可以学习下。
    2020-08-08
  • 详解MySQL幻读及如何消除

    详解MySQL幻读及如何消除

    这篇文章主要介绍了详解MySQL 幻读及解决方法,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下
    2021-03-03
  • CentOS下彻底卸载mysql的方法

    CentOS下彻底卸载mysql的方法

    这篇文章主要为大家详细介绍了CentOS下彻底卸载mysql的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • MySQL聚合查询与联合查询操作实例

    MySQL聚合查询与联合查询操作实例

    这篇文章主要给大家介绍了关于MySQL聚合查询与联合查询操作的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友可以参考下
    2022-02-02
  • Mysql常用基准测试命令总结

    Mysql常用基准测试命令总结

    在本篇文章中我们给大家分享了关于Mysql常用基准测试命令的总结内容,有需要的读者们可以学习下。
    2018-10-10
  • mysql 8.0.19 安装配置方法图文教程

    mysql 8.0.19 安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.19 安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02

最新评论