Documentation Home
MySQL 8.0 参考手册  / 第 15 章 InnoDB 存储引擎  / 15.8 InnoDB配置  / 15.8.3 InnoDB缓冲池配置  /  15.8.3.7 从核心文件中排除缓冲池页面

15.8.3.7 从核心文件中排除缓冲池页面

核心文件记录正在运行的进程的状态和内存映像。因为缓冲池驻留在主内存中,并且正在运行的进程的内存映像被转储到核心文件,所以具有大缓冲池的系统可以在mysqld进程死亡时产生大的核心文件。

由于多种原因,大型核心文件可能会出现问题,包括写入它们所需的时间、它们消耗的磁盘空间量以及与传输大型文件相关的挑战。

要减小核心文件大小,您可以禁用该 innodb_buffer_pool_in_core_file 变量以从核心转储中忽略缓冲池页面。该 innodb_buffer_pool_in_core_file 变量在 MySQL 8.0.14 中引入,默认启用。

如果您担心将数据库页面转储到可能在组织内部或外部共享的核心文件以进行调试,从安全角度来看,排除缓冲池页面可能也是可取的。

笔记

在mysqld进程终止 时访问缓冲池页面中存在的数据在某些调试场景中可能是有益的。如果不确定是包含还是排除缓冲池页面,请咨​​询 MySQL 支持。

仅当启用该变量且操作系统支持对 madvise() 系统调用的非 POSIX 扩展时, 禁用 innodb_buffer_pool_in_core_file 才会生效 ,Linux 3.4 及更高版本支持该扩展。该 扩展会导致指定范围内的页面从核心转储中排除。 core_fileMADV_DONTDUMPMADV_DONTDUMP

假设操作系统支持 MADV_DONTDUMP扩展,使用--core-file--innodb-buffer-pool-in-core-file=OFF 选项启动服务器以生成没有缓冲池页面的核心文件。

$> mysqld --core-file --innodb-buffer-pool-in-core-file=OFF

core_file变量是只读的,默认情况下是禁用的。它通过 --core-file在启动时指定选项来启用。innodb_buffer_pool_in_core_file 变量是动态的 。它可以在启动时指定或在运行时使用 SET 语句配置。

mysql> SET GLOBAL innodb_buffer_pool_in_core_file=OFF;

如果该 innodb_buffer_pool_in_core_file 变量被禁用但MADV_DONTDUMP操作系统不支持,或者发生 madvise()故障,则会向 MySQL 服务器错误日志写入警告,并且该 core_file变量被禁用以防止写入无意中包含缓冲池页面的核心文件。如果只读 core_file变量被禁用,则必须重新启动服务器才能再次启用它。

下表显示 MADV_DONTDUMP了确定是否生成核心文件以及它们是否包含缓冲池页面的配置和支持方案。

表 15.4 核心文件配置方案

core_file多变的 innodb_buffer_pool_in_core_file 多变的 madvise() MADV_DONTDUMP 支持 结果
关闭(默认) 与结果无关 与结果无关 没有生成核心文件
打开(默认) 与结果无关 核心文件是用缓冲池页面生成的
离开 是的 在没有缓冲池页面的情况下生成核心文件
离开 不生成核心文件,core_file 禁用,并向服务器错误日志写入警告

通过禁用该 innodb_buffer_pool_in_core_file 变量实现的核心文件大小的减少取决于缓冲池的大小,但它也受InnoDB页面大小的影响。较小的页面大小意味着相同数量的数据需要更多的页面,而更多的页面意味着更多的页面元数据。下表提供了您可能会看到的具有不同页面大小的 1GB 缓冲池的大小缩减示例。

表 15.5 包含和排除缓冲池页面的核心文件大小

innodb_page_size环境 包含的缓冲池页数 ( innodb_buffer_pool_in_core_file=ON) 排除的缓冲池页面 ( innodb_buffer_pool_in_core_file=OFF)
4KB 2.1GB 0.9GB
64KB 1.7GB 0.7GB