Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Excluding Buffer Pool Pages from Core Files

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

核心文件记录了正在运行的进程的状态和内存映像。由于缓冲池驻留在主内存中,并且正在运行的进程的内存映像被转储到核心文件中,因此具有大缓冲池的系统在 mysqld 进程死亡时可能会生成大型核心文件。

大型核心文件可能会引发多种问题,包括写入时间、磁盘空间消耗和大型文件传输的挑战。

要减少核心文件的大小,可以禁用 innodb_buffer_pool_in_core_file 变量,以排除缓冲池页面从核心转储中。默认情况下,它是启用的。

从安全角度来看,排除缓冲池页面也可能是可取的,因为您可能不想将数据库页面转储到核心文件中,以便在组织内部或外部用于调试目的。

Note

mysqld 进程死亡时,缓冲池页面中的数据可能对某些调试场景有益。如果您不确定是否包括或排除缓冲池页面,请咨询 MySQL 支持。

禁用 innodb_buffer_pool_in_core_file 只有在 core_file 变量启用且操作系统支持 MADV_DONTDUMP 非 POSIX 扩展到 madvise() 系统调用时才生效,该扩展支持在 Linux 3.4 及更高版本中。

假设操作系统支持 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 支持场景,这些场景确定了核心文件是否生成以及是否包含缓冲池页面。

表 17.4 核心文件配置场景

core_file variable innodb_buffer_pool_in_core_file variable madvise() MADV_DONTDUMP Support Outcome
OFF (default) 不相关于结果 不相关于结果 核心文件不生成
ON ON (默认) 不相关于结果 核心文件生成,包含缓冲池页面
ON OFF 核心文件生成,不包含缓冲池页面
ON OFF 核心文件不生成,core_file 被禁用,并写入警告到服务器错误日志

通过禁用 innodb_buffer_pool_in_core_file 变量,核心文件大小的减少取决于缓冲池的大小,但也受到 InnoDB 页大小的影响。较小的页大小意味着相同数据量需要更多页,更多页意味着更多页元数据。下表提供了 1GB 缓冲池不同页大小下的大小减少示例。

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

innodb_page_size Setting Buffer Pool Pages Included (innodb_buffer_pool_in_core_file=ON) Buffer Pool Pages Excluded (innodb_buffer_pool_in_core_file=OFF)
4KB 2.1GB 0.9GB
64KB 1.7GB 0.7GB