配置Buffer Pool大小
Buffer Pool(后文简称为 BP)就是DB的一个内存组件,可理解一片内存数据结构,所以肯定就有大小。默认128M,其实偏小了,生产环境下可以调整BP大小。比如DB是16核32G,那你就能给BP分配个2G内存,使用下面的配置就可以了。
[server] innodb_buffer_pool_size=2147483648
数据页
MySQL中抽象出来的数据单位。
假设现在DB中一定有一片内存区域是Buffer Pool,我们的数据如何放在Buffer Pool的?
DB的核心数据模型就是表+字段+行的概念,即我们都知道DB有一个个表,一个表有很多字段,然后一个表里有很多行数据,每行数据都有自己的字段值。所以我们的数据是一行行放在BP里的吗?
No!MySQL对数据抽象出来了一个数据页的概念,他把很多行数据放在一个数据页,即磁盘文件有很多数据页,每一页数据里放了很多行数据:
所以更新一行数据,此时DB会找到这行数据所在的数据页,然后从磁盘文件里把这行数据所在的数据页直接给加载到BP。即BP存放的是一个个数据页:
磁盘上的数据页和BP中的缓存页如何对应?
默认磁盘中存放的数据页大小16K,即一页数据包含16K内容。而BP存放的一个个数据页,通常叫缓存页,毕竟BP是个缓冲池,里面的数据都是从磁盘缓存到内存的。
而BP默认情况下,一个缓存页大小和磁盘上的一个数据页大小一一对应,都是16K。BP假设为128M,一个数据页16K。
缓存页对应的描述信息
每个缓存页都有个描述信息。包含:这数据页所属的表空间、数据页的编号、这个缓存页在BP中的地址等。
这描述信息本身也是块数据,在BP中,每个缓存页的描述数据放在最前,各个缓存页在后:
BP中的描述数据大概相当于缓存页大小的5%,即800K,假设设置的buffer pool大小128M,实际上Buffer Pool真正的最终大小会超出一些,可能有个130多MB的样子,因为他里面还要存放每个缓存页的描述数据。
4000520066 欢迎批评指正
All Rights Reserved 新浪公司 版权所有