# 什么是chunk机制 chunk是 MySQL 设计的一种机制,这种机制的原理是将 Buffer Pool 拆分一个一个大小相等的 chunk 块,每个 chunk 默认大小为 128M(可以通过参数innodb_buffer_pool_chunk_size 来调整大小),也就是说 Buffer Pool 是由一个个的chunk组成的 假设 Buffer Pool 大小是2GB,而一个chunk大小默认是128...
划分空间后Buffer Pool的缓存页是都是空的,里面什么都没有,当要对数据执行增删改查的操作的时候,才会把数据对应的页从磁盘文件里读取出来,放入Buffer Pool中的缓存页中。 3.2 Free链表 「在Buffer pool刚被初始化出来的时候,里面的数据页以及控制块都是空的」,当执行读写的时候磁盘的数据页会加载到Buffer pool的...
此时有一个很关键的公式:buffer pool总大小 = (chunk大小 * buffer pool数量) 的倍数 比如默认的chunk大小是128MB,那么此时如果你的机器的内存是32GB,你打算给buffer pool总大小在20GB左右,此时你的buffer pool的数量应该是多少个呢? 假设你的buffer pool的数量是16个,这是没问题的,那么此时chunk大小 * buffer ...
所以数据库会为Buffer Pool设计一个free链表,他是一个双向链表数据结构,这个free链表里,每个节点就是一个空闲的缓存页的描述数据块的地址,也就是说,只要你一个缓存页是空闲的,那么他的描述数据块就会被放入这个free链表中。如果要把数据页写入缓存页,就从链表中摘除这个节点,将该节点的描述数据写到Buffer pool,再...
在MySQL的InnoDB存储引擎中,缓冲池(Buffer Pool)是一个关键的内存结构,用于缓存数据和索引,以减少对物理磁盘的I/O操作。以下是缓冲池中一些重要组件的详细解释: 1. 索引页(Index Pages) 索引页存储了InnoDB表的索引结构,包括主键索引(聚集索引)和辅助索引(非聚集索引)。这些索引页被加载到缓冲池中,以加速对表中...
buffer pool是一片连续的内存空间,当MySQL运行一段时间后,这片连续的内存空间中会同时存在空闲的缓存页和被使用的缓存页,为了能够快速找到空闲的缓存页,可以使用链表结构。MySQL将空闲缓存页的控制块作为链表的节点,这个链表称为Free链表(空闲链表)。如图所示:图中:Free链表中除了有控制块,还有一个头节点,该...
我们主要讲了InnoDB的存储引擎,其中主要的一个组件就是缓存池Buffer Pool,缓存了磁盘的真实数据,然后基于缓存做增删改查操作,同时配合了后续的redo log、刷磁盘等机制和操作。如下图: 这一篇,深入该组件内部,学习一下其设计思想。 2. Buffer Pool数据结构 ...
简介:【MySQL进阶-08】深入理解innodb存储格式,双写机制,buffer pool底层结构和淘汰策略 一,innodb数据存储结构 innoDB 是一个将表中的数据存储到磁盘上的存储引擎,在真正处理数据的时候,是在内存中处理的,因此需要将数据从磁盘读取到内存中,在处理写入或者修改操作之后,也需要进行一个刷盘的操作,将数据从内存刷新到...
buffer pool 就是一个缓存,将磁盘中的数据缓存到内存中,对数据的操作改为通过内存进行操作,然后刷盘的操作,提升性能。 innodb_buffer_pool_size控制缓存池的大小。 2.内部架构 3. 描述信息 4.free 链表 当我们初始化 buffer pool 之后,会不断的有数据被从磁盘中缓存到 buffer pool 里,但是我们...
在操作系统中,为了减少磁盘IO,引入了「缓冲池」(buffer pool)机制。 MySQL作为一个存储系统,为提高性能,减少磁盘IO,同样具有「缓冲池」(buffer pool)机制。 结构图如下: 「上述结构图中展示了Buffer Pool作为InnoDB内存结构的四大组件之一,不属于MySQL的Server层,是InnoDB存储引擎层的缓冲池」。因此这个跟MySQL8.0删掉...