重要组件buffer pool,缓存磁盘数据页,降低事务 io 代价,提高事务的执行速度,显著影响db整体性能,MySQL的每个版本都对buffer pool进行了一些改进
5.7 改进三方面
- buffer pool的dump和load
- 在线修改buffer pool
- 优化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的刷盘操作
- innodb_page_cleaners修改多个page clean thread线程数,最多innodb_buffer_pool_instance
- Hazard Pointers,减少了扫描buffer pool的代价
- dml LSN 性能