核心文件记录正在运行的进程的状态和内存映像。由于缓冲池位于主内存中,并且正在运行的进程的内存映像被转储到核心文件中,因此具有大缓冲池的系统在运行时可以产生大的核心文件mysqld死亡的过程。
大的核心文件可能会有很多问题,包括写入它们所需的时间、它们消耗的磁盘空间量以及与传输大文件相关的挑战。
要减小核心文件大小,可以禁用innodb_buffer_pool_in_core_file
变量从核心转储中省略缓冲池页面。的innodb_buffer_pool_in_core_file
变量是在MySQL 8.0.14中引入的,默认启用。
如果您担心将数据库页转储到可能在组织内外共享的用于调试目的的核心文件中,那么从安全角度来看,排除缓冲池页也是可取的。
调用时对缓冲池页中数据的访问mysqld进程死亡在某些调试场景中可能是有益的。如果不确定是否包含或排除缓冲池页面,请咨询MySQL支持。
禁用innodb_buffer_pool_in_core_file
仅当core_file
变量,且操作系统支持MADV_DONTDUMP
的非posix扩展madvise ()Linux 3.4及更高版本支持的系统调用。的MADV_DONTDUMP
扩展将使指定范围内的页从核心转储中排除。
假设操作系统支持MADV_DONTDUMP
扩展,启动服务器——核心文件
而且——innodb-buffer-pool-in-core-file =了
生成不带缓冲池页面的核心文件的选项。
shell> mysqld——core-file——innodb-buffer-pool-in-core-file=OFF
的core_file
变量默认为只读且禁用。属性启用——核心文件
选项在启动。的innodb_buffer_pool_in_core_file
变量是动态的。可以在启动时指定它,也可以在运行时使用集
声明。
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配置场景
core_file 变量 |
innodb_buffer_pool_in_core_file 变量 |
madvise() MADV_DONTDUMP支持 | 结果 |
---|---|---|---|
(默认) | 与结果无关 | 与结果无关 | 不生成Core文件 |
在 | (默认) | 与结果无关 | 使用缓冲池页面生成核心文件 |
在 | 从 | 是的 | 核心文件在没有缓冲池页面的情况下生成 |
在 | 从 | 没有 | 不生成核心文件,core_file 是否禁用,并将警告写入服务器错误日志 |
控件可以减小核心文件大小innodb_buffer_pool_in_core_file
变量的大小取决于缓冲池的大小,但也受InnoDB
页面大小。较小的页面大小意味着相同数量的数据需要更多的页面,而更多的页面意味着更多的页面元数据。下表提供了不同页面大小的1GB缓冲池的大小减小示例。
表15.5包含和不包含缓冲池页面的核心文件大小
innodb_page_size 设置 |
包括缓冲池页面(innodb_buffer_pool_in_core_file =对 ) |
缓冲池页面排除(innodb_buffer_pool_in_core_file =了 ) |
---|---|---|
4 kb | 2.1 gb | 0.9 gb |
64 kb | 1.7 gb | 0.7 gb |