MySQL: 10 Buffer Pool的内存数据结构
Posted 鮀城小帅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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。
2.数据页:MySQL中抽象出来的数据单位
数据库的核心数据模型是表+字段+行的概念,也就是说我们都知道数据库里有一个一个的表,一个表有很多字段,然后一个表里有很多行数据,每行数据都有自己的字段值。
对于Buffer Pool 而言,MySQL对数据抽象出来了一个数据页的概念,它是把很多行数据放在了一个数据页里,也就是说我们的磁盘文件中就是会有很多的数据页,每一页数据里放了很多行数据。
实际上我们要更新一行数据,此时数据库会找到这行数据所在的数据页,然后从磁盘文件里把这行数据所在的数据页直接给加载到 Buffer Pool 里去。
也就是说,Buffer Pool中存放的是一个一个的数据页,
3. 磁盘上的数据页和Buffer Pool中的缓存页是如何对应起来的
默认情况下,磁盘中存放的数据页的大小是16KB,也就是说,一页数据包含了16KB的内容。
而Buffer Pool中存放的一个一个的数据页,通常叫做缓存页,因为Buffer Pool是一个缓存池,里面的数据都是从磁盘缓存到内存去的。
在默认情况下,一个缓存页的大小和磁盘上的一个数据页的大小是一一对应起来的,都是16KB。
4.缓存页对应的描述信息
每个缓存页中都有一个描述信息,该信息用来描述这个缓存也的结构数据。主要包含:该数据页所属的表空间、数据页的编号、这个缓存页在Buffer Pool中的地址以及别的一些杂七杂八的东西。
每个缓存页都会对应一个描述信息,这个描述信息本身也是一块数据,在Buffer Pool中,每个缓存页的描述数据放在最前面,然后各个缓存页放在后面。
Buffer Pool中的描述数据大概相当于缓存页大小的 5% 左右,也就是每个描述数据大概是800个字节左右的大小,然后假设你设置的 buffer pool 大小是128MB,实际上Buffer Pool 真正的最终大小会超出一些,可能有个130多MB的样子,因为它里面还要存放每个缓存页的描述数据。
以上是关于MySQL: 10 Buffer Pool的内存数据结构的主要内容,如果未能解决你的问题,请参考以下文章
mysql参数之innodb_buffer_pool_size大小设置
mysql_存储引擎层-innodb buffer pool