重要组件buffer pool,缓存磁盘数据页,降低事务 io 代价,提高事务的执行速度,显著影响db整体性能,MySQL的每个版本都对buffer pool进行了一些改进

5.7 改进三方面

  1. buffer pool的dump和load
  2. 在线修改buffer pool
  3. 优化buffer pool刷盘

buffer pool的dump和load

dump 将缓冲数据 dump到datadir\ib_buffer_pool

load 将 ib_buffer_pool 数据页读入内存

适用于db重启,buffer pool快速预热,避免重启后,缓冲区失效,性能显著下降

dump和load 5.6就有

5.7 默认开启,并innodb_buffer_pool_dump_pct指定dump缓冲区中的多少页

在线修改buffer pool

innodb_buffer_pool_size是innodb_buffer_pool_chunk_size* innodb_buffer_pool_instances的倍数

SET GLOBAL innodb_buffer_pool_size=1073741824;

后台线程完成,且等待所有活跃事务完成以后,才能开始

修改过程中,buffer pool中的数据页也不能访问(除收缩buffer pool时,被抛弃的那部分页)

查看进度:

SHOW STATUS WHERE Variable_name='InnoDB_buffer_pool_resize_status';

128M修改为1G,微妙时间内完成,比修改配置文件,再重启数据库速度快很多

resize innodb buffer pool期间,buffer pool是加锁的,也就是说,在此期间,无法进行任何操作。因此,在线修改buffer pool也需要谨慎

优化buffer pool的刷盘操作

  1. innodb_page_cleaners修改多个page clean thread线程数,最多innodb_buffer_pool_instance
  2. Hazard Pointers,减少了扫描buffer pool的代价
  3. dml LSN 性能