用于缓存索引和数据的内存大小,数据读写在内存中非常快, 减少了对磁盘的读写。 当数据提交或满足检查点条件后才一次性将内存数据刷新到磁盘中。
参数说明
Innodb_buffer_pool_pages_data缓存池中包含数据的页的数目,包括脏页。单位是page。 eg:show global status like 'Innodb_buffer_pool_pages_data'; Innodb_buffer_pool_pages_total缓存池中包含数据的页总数目。单位是page。 eg:show global status like 'Innodb_buffer_pool_pages_total';
Innodb_page_size innodb_page_size 作为 innodb 和 OS 交互单位。文件系统对文件的 buffer IO,也是 page 为单位进行处理的。Linux 的默认 page 的大小 4096 字节,当要将数据写入到文件的时候,会先在内存里,然后将对应的 page cache,整个的从内存刷到磁盘上。但是如果要写入的文件区域,因为还没有被缓存或者被置换出去了等原因,在内存里不存在对应的 page cache,则需要先将对应 page 的内容从磁盘上读到内存里,修改要写入的数据,然后在将整个 page 写回到磁盘;在这种情况下,会有一次额外的读 IO 开销,IO 的性能会有一定的损失。假如 mysql 的 16K 的页表数据支持起,那就是一次内存 IO 光是虚拟地址到物理地址的转换就要去内存查 4 次页表,再算上真正的内存访问,需要 5 次内存 IO 才能获取一个内存数据。 eg:select @@innodb_page_size/1024/1024/1024; #字节转换为G
调整Innodb_page_size的大小为4G,如果不设置默认为128M
set global Innodb_page_size = 4227858432;
计算Innodb_buffer_pool_pages_data/Innodb_buffer_pool_pages_total*100% 当结果 > 95% 则增加 innodb_buffer_pool_size, 建议使用物理内存的 75% 当结果 < 95% 则减少 innodb_buffer_pool_size, 建议设置大小为: Innodb_buffer_pool_pages_data * Innodb_page_size * 1.05 / (1024*1024*1024)