暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[ACDU 翻译] MySQL 15.8.3.6 保存和恢复缓冲池状态

原创 由迪 2021-06-19
725

为了减少重新启动服务器后的预热时间,InnoDB在服务器关闭时为每个缓冲池保存最近使用的页面的百分比,并在服务器启动时恢复这些页面。存储的最近使用页面的百分比由innodb_buffer_pool_dump_pct 配置选项定义 。

重新启动繁忙的服务器后,通常会有一个吞吐量稳定增加的预热期,因为缓冲池中的磁盘页面被带回内存(因为查询、更新相同的数据等)。在启动时恢复缓冲池的能力通过重新加载重新启动之前缓冲池中的磁盘页面而不是等待 DML 操作访问相应的行来缩短预热时间。此外,I/O 请求可以大批量执行,从而使整体 I/O 更快。页面加载在后台进行,不会延迟数据库启动。

除了在关闭时保存缓冲池状态并在启动时恢复它之外,您还可以在服务器运行时随时保存和恢复缓冲池状态。例如,您可以在稳定的工作负载下达到稳定的吞吐量后保存缓冲池的状态。您还可以在运行报告或维护作业将数据页带入缓冲池后,这些操作只需要这些操作,或者在运行一些其他非典型工作负载后恢复先前的缓冲池状态。

尽管缓冲池的大小可能有很多 GB,但InnoDB相比之下,保存到磁盘的缓冲池数据很小。仅将定位适当页面所需的表空间 ID 和页面 ID 保存到磁盘。此信息来自该 表。默认情况下,表空间 ID 和页 ID 数据保存在名为 的文件中,该文件 保存在 数据目录中。可以使用 配置参数修改文件名和位置 。 INNODB_BUFFER_PAGE_LRU INFORMATION_SCHEMA``ib_buffer_pool``InnoDBinnodb_buffer_pool_filename

由于数据在缓冲池中缓存和老化,就像常规数据库操作一样,如果磁盘页面最近更新,或者如果 DML 操作涉及尚未加载的数据,则没有问题。加载机制会跳过不再存在的请求页面。

底层机制涉及一个后台线程,该线程被分派以执行转储和加载操作。

压缩表中的磁盘页面以其压缩形式加载到缓冲池中。在 DML 操作期间访问页面内容时,页面将像往常一样解压缩。由于解压缩页面是一个 CPU 密集型过程,因此在连接线程中执行并发操作比在执行缓冲池还原操作的单个线程中执行操作更有效率。

以下主题描述了与保存和恢复缓冲池状态相关的操作:

配置缓冲池页面的转储百分比

在从缓冲池转储页面之前,您可以通过设置该innodb_buffer_pool_dump_pct 选项来配置要转储的最近使用的缓冲池页面的百分比 。如果您计划在服务器运行时转储缓冲池页面,您可以动态配置该选项:

SET GLOBAL innodb_buffer_pool_dump_pct=40;

如果您计划在服务器关闭时转储缓冲池页面,请innodb_buffer_pool_dump_pct 在您的配置文件中进行设置 。

[mysqld] innodb_buffer_pool_dump_pct=40

innodb_buffer_pool_dump_pct 默认值是25(转储最近最常使用的页面的25%)。

在关机时保存缓冲池状态并在启动时恢复它

要在服务器关闭时保存缓冲池的状态,请在关闭服务器之前发出以下语句:

SET GLOBAL innodb_buffer_pool_dump_at_shutdown=ON;

innodb_buffer_pool_dump_at_shutdown 默认情况下启用。

要在服务器启动时恢复缓冲池状态,请在启动服务器时指定--innodb-buffer-pool-load-at-startup 选项:

mysqld --innodb-buffer-pool-load-at-startup=ON;

innodb_buffer_pool_load_at_startup 默认情况下启用。

在线保存和恢复缓冲池状态

要在 MySQL 服务器运行时保存缓冲池的状态,请发出以下语句:

SET GLOBAL innodb_buffer_pool_dump_now=ON;

要在 MySQL 运行时恢复缓冲池状态,请发出以下语句:

SET GLOBAL innodb_buffer_pool_load_now=ON;
显示缓冲池转储进度

要在将缓冲池状态保存到磁盘时显示进度,请发出以下语句:

SHOW STATUS LIKE 'Innodb_buffer_pool_dump_status';

如果操作尚未开始,则返回“ not started ”。如果操作完成,则打印完成时间(例如 Finished at 110505 12:18:02)。如果操作正在进行,则提供状态信息(例如,Dumping buffer pool 5/7,第 237/2873 页)。

显示缓冲池加载进度

要在加载缓冲池时显示进度,请发出以下语句:

SHOW STATUS LIKE 'Innodb_buffer_pool_load_status';

如果操作尚未开始,则返回“ not started ”。如果操作完成,则打印完成时间(例如 Finished at 110505 12:23:24)。如果操作正在进行,则提供状态信息(例如已加载 123/22301 页)。

中止缓冲池加载操作

要中止缓冲池加载操作,请发出以下语句:

SET GLOBAL innodb_buffer_pool_load_abort=ON;
使用性能模式监控缓冲池加载进度

您可以使用Performance Schema监视缓冲池加载进度 。

以下示例演示了如何启用 stage/innodb/buffer pool load阶段事件工具和相关使用者表来监控缓冲池加载进度。

有关此示例中使用的缓冲池转储和加载过程的信息,请参阅 第 15.8.3.6 节,“保存和恢复缓冲池状态”。有关 Performance Schema 阶段事件工具和相关使用者的信息,请参阅 第 27.12.5 节,“Performance Schema 阶段事件表”

  1. 启用stage/innodb/buffer pool load仪器:

    mysql> UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' WHERE NAME LIKE 'stage/innodb/buffer%';
  2. 启用舞台活动消费表,其中包括 events_stages_currentevents_stages_history,和 events_stages_history_long

    mysql> UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%stages%';
  3. 通过启用转储当前缓冲池状态 innodb_buffer_pool_dump_now

    mysql> SET GLOBAL innodb_buffer_pool_dump_now=ON;
  4. 检查缓冲池转储状态以确保操作已完成。

    mysql> SHOW STATUS LIKE 'Innodb_buffer_pool_dump_status'\G *************************** 1. row *************************** Variable_name: Innodb_buffer_pool_dump_status Value: Buffer pool(s) dump completed at 150202 16:38:58
  5. 通过启用加载缓冲池 innodb_buffer_pool_load_now

    mysql> SET GLOBAL innodb_buffer_pool_load_now=ON;
  6. 通过查询 Performance Schemaevents_stages_current表来检查缓冲池加载操作的当前状态 。该WORK_COMPLETED列显示加载的缓冲池页面数。该 WORK_ESTIMATED列提供了剩余工作的估计值(以页为单位)。

    mysql> SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED FROM performance_schema.events_stages_current; +-------------------------------+----------------+----------------+ | EVENT_NAME | WORK_COMPLETED | WORK_ESTIMATED | +-------------------------------+----------------+----------------+ | stage/innodb/buffer pool load | 5353 | 7167 | +-------------------------------+----------------+----------------+

    events_stages_current 如果缓冲池加载操作已完成, 该表将返回一个空集。在这种情况下,您可以检查 events_stages_history表以查看已完成事件的数据。例如:

    mysql> SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED FROM performance_schema.events_stages_history; +-------------------------------+----------------+----------------+ | EVENT_NAME | WORK_COMPLETED | WORK_ESTIMATED | +-------------------------------+----------------+----------------+ | stage/innodb/buffer pool load | 7167 | 7167 | +-------------------------------+----------------+----------------+

笔记

在启动时使用 加载缓冲池时,您还可以使用 Performance Schema 监视缓冲池加载进度 innodb_buffer_pool_load_at_startup。在这种情况下,stage/innodb/buffer pool load必须在启动时启用仪器和相关消费者。有关更多信息,请参阅 第 27.3 节,“性能架构启动配置”

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论