MySQL: 10 Buffer Pool的内存数据结构

1. Buffer Pool大小的配置

Buffer Pool是数据库的一个内存组件,可以理解为一片内存数据结构,这个内存结构是有一定大小的。

Buffer Pool的默认大小是128MB,可根据实际生产环境进行调整。调整Buffer Pool的配置如下:

[server]
innodb_buffer_pool_size=2147483648 # 这里调整为2GB
  • Windows下MySQL的配置文件是my.ini,一般会在安装目录的根目录。
  • Linux下MySQL的配置文件是my.cnf,一般会放在/etc/my.cnf,/etc/mysql/my.cnf。MySQL: 10 Buffer Pool的内存数据结构

2.数据页:MySQL中抽象出来的数据单位

数据库的核心数据模型是表+字段+行的概念,也就是说我们都知道数据库里有一个一个的表,一个表有很多字段,然后一个表里有很多行数据,每行数据都有自己的字段值。

对于Buffer Pool 而言,MySQL对数据抽象出来了一个数据页的概念,它是把很多行数据放在了一个数据页里,也就是说我们的磁盘文件中就是会有很多的数据页,每一页数据里放了很多行数据。

MySQL: 10 Buffer Pool的内存数据结构

实际上我们要更新一行数据,此时数据库会找到这行数据所在的数据页,然后从磁盘文件里把这行数据所在的数据页直接给加载到 Buffer Pool 里去。

也就是说,Buffer Pool中存放的是一个一个的数据页,

MySQL: 10 Buffer Pool的内存数据结构

 3. 磁盘上的数据页和Buffer Pool中的缓存页是如何对应起来的

默认情况下,磁盘中存放的数据页的大小是16KB,也就是说,一页数据包含了16KB的内容。

而Buffer Pool中存放的一个一个的数据页,通常叫做缓存页,因为Buffer Pool是一个缓存池,里面的数据都是从磁盘缓存到内存去的。

在默认情况下,一个缓存页的大小和磁盘上的一个数据页的大小是一一对应起来的,都是16KB。

MySQL: 10 Buffer Pool的内存数据结构

4.缓存页对应的描述信息

每个缓存页中都有一个描述信息,该信息用来描述这个缓存也的结构数据。主要包含:该数据页所属的表空间、数据页的编号、这个缓存页在Buffer Pool中的地址以及别的一些杂七杂八的东西。

每个缓存页都会对应一个描述信息,这个描述信息本身也是一块数据,在Buffer Pool中,每个缓存页的描述数据放在最前面,然后各个缓存页放在后面。

MySQL: 10 Buffer Pool的内存数据结构

  Buffer Pool中的描述数据大概相当于缓存页大小的 5% 左右,也就是每个描述数据大概是800个字节左右的大小,然后假设你设置的 buffer pool 大小是128MB,实际上Buffer Pool 真正的最终大小会超出一些,可能有个130多MB的样子,因为它里面还要存放每个缓存页的描述数据。

上一篇:MySQL中的Buffer Pool-支撑高并发的一些设计


下一篇:大数据智能加工系统进度报告