MySQL数据库中FreeList的机制是什么

介绍

今天就跟大家聊聊有关MySQL数据库中FreeList的机制是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

<强>一、前言

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

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

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

这个问题就引出了空闲列表。

<强>二、空闲列表

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

InnoDB设计空闲列表的初衷就是为了解决上面说的问题。

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

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

<强>三,如何判断数据页有没有在缓存中?

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

这个功能的实现依托于另一个数据结构:哈希表

键=表空间号+数据页号

value=https://www.yisu.com/zixun/缓存页地址

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

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

看完上述内容,你们对MySQL数据库中FreeList的机制是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

MySQL数据库中FreeList的机制是什么