在 MySQL 5.6 中预热 InnoDB 缓冲池有哪些不同的方法?

Mon*_*hon 1 mysql innodb mysql-5.6 startup buffer-pool

预热一个冷 MySQL 实例是将所有数据或最有可能习惯的数据移动到主内存中。而且,是的,通过主内存,我的意思是 InnoDB 缓冲池。缓冲池通常被配置为一大块主内存。将所有数据从磁盘获取到主内存需要时间。与其留到以后,缓冲池能否提前加载最期望最早使用的数据?

Mon*_*hon 6

假设您有一个 7200 rpm 的 HDD,如果您执行随机读取并期望在应用程序需要时加载数据,则会减慢整个过程。在 HDD 的情况下,随机读取比顺序读取慢得多。因此,记录必须以顺序访问的方式加载。

例如,在重新启动 MySQL 之后,在常规工作负载下将整个工作集数据存储到缓冲池中可能需要一段时间。您可以选择以下两个选项之一:

  • 手动预热- 对 InnoDB 表运行 SELECT 查询会将必要的页面加载到内存中,即缓冲池。SELECT COUNT(*) 可能非常有用,因为它将整个聚集索引加载到内存中(实际上尽可能多)。二级索引可以通过简单的查询加载到内存中,例如通过在索引的第一列上添加一个包罗万象的,即 <> 0 WHERE 子句。如果需要,可以强制使用给定的索引。
  • 自动预热- 从 5.6 开始,可以启用关闭时自动缓冲池内容转储和启动时恢复 - innodb_buffer_pool_dump_at_shutdown = ON,innodb_buffer_pool_load_at_startup = ON。

参考 -来自 Dual 关于 InnoDB 预热的文章

Marcelo Altmann 关于 MySQL 预热的文章

  • 自动预热是 mysql 5.7 中的默认行为 https://www.percona.com/blog/2016/11/30/using-innodb-buffer-pool-pre-load-feature-mysql-5-7/ (2认同)