必须同时开启innodb_buffer_pool_dump_at_shutdown和innodb_buffer_pool_load_at_startup才能实现自动预热;仅开前者无效,因关机dump是加载的前提,启动加载需后者显式启用,且二者须同配于[mysqld]段、重启生效,并排除kill-9、配置挂载失败等干扰。

必须同时开启 innodb_buffer_pool_dump_at_shutdown 和 innodb_buffer_pool_load_at_startup,否则预热不会发生——关机不 dump,启动就无数据可 load。
为什么开了 innodb_buffer_pool_dump_at_shutdown=ON 还没效果
这个参数只是让 MySQL 在正常关闭前把当前 Buffer Pool 中的热页地址写入磁盘文件,但重启时是否加载,完全取决于另一个参数是否开启。常见失效原因包括:
-
innodb_buffer_pool_load_at_startup没配或配错位置(必须在[mysqld]段,不能写在[client]) - 配置改了但没重启 mysqld,或者用了
--defaults-file指向了其他配置文件 - 容器部署中 my.cnf 未正确挂载进容器,导致实际运行时读不到该参数
- MySQL 是被
kill -9或异常崩溃终止的,dump_at_shutdown不会触发
如何验证 dump 文件是否真正生成并可用
光看配置不等于落地。最直接验证方式是手动执行一次正常关闭 + 启动后检查:
- 确认
datadir下存在非空的ib_buffer_pool文件(默认名,路径由innodb_buffer_pool_filename控制) - 启动后立即执行:
SHOW STATUS LIKE 'Innodb_buffer_pool_dump_status';,返回值中应含类似Dumping buffer pool to /var/lib/mysql/ib_buffer_pool at page number 12345的完成标记 - 若显示
Not started或为空,说明配置未生效,或 mysqld 启动时根本没读到该参数
innodb_buffer_pool_dump_pct 要不要调低
默认值 25% 表示只 dump LRU 链表中“new sublist”里最热的 25% 页面。对生产环境来说,这个比例偏高,尤其当 Buffer Pool 达几十 GB 时,dump 文件可能达数百 MB,加载耗时明显。建议:
- 设为
10~20,聚焦真正高频访问的页,缩短 dump/load 时间 - 避免设为
100:全量 dump 不仅慢,还会在关机时拖长停机窗口,且加载阶段容易引发初期Innodb_buffer_pool_reads上升 - 该参数可动态设置:
SET GLOBAL innodb_buffer_pool_dump_pct = 15;,无需重启
预热只解决冷启动抖动,不是万能药。如果重启后性能仍上不去,优先排查 SQL 效率、索引缺失、事务阻塞或 innodb_buffer_pool_instances 设置不合理导致的 mutex 争用——这些比 dump 文件本身更容易被忽略。











