Documentation Home
MySQL 8.0 参考手册  / 第 15 章 InnoDB 存储引擎  / 15.6 InnoDB 磁盘结构  / 15.6.3 表空间  /  15.6.3.8 在 Linux 上优化表空间空间分配

15.6.3.8 在 Linux 上优化表空间空间分配

从 MySQL 8.0.22 开始,您可以优化如何InnoDB 在 Linux 上为 file-per-table 和通用表空间分配空间。默认情况下,当需要额外空间时, InnoDB将页面分配给表空间并向这些页面物理写入 NULL。如果频繁分配新页面,此行为会影响性能。从 MySQL 8.0.22 开始,您可以 innodb_extend_and_initialize在 Linux 系统上禁用以避免将 NULL 物理写入新分配的表空间页面。禁用时 innodb_extend_and_initialize,将使用调用将空间分配给表空间文件 posix_fallocate(),这会保留空间而无需实际写入 NULL。

当使用 posix_fallocate()调用分配页面时,默认情况下扩展大小很小,并且一次通常只分配几个页面,这会导致碎片并增加随机 I/O。为避免此问题,请在启用posix_fallocate()调用时增加表空间扩展大小。AUTOEXTEND_SIZE使用该选项可以将表空间扩展大小增加到 4GB 。有关详细信息,请参阅第 15.6.3.9 节,“表空间 AUTOEXTEND_SIZE 配置”

InnoDB在分配新的表空间页面之前写入重做日志记录。如果页面分配操作被中断,则在恢复期间从重做日志记录中重播该操作。(从重做日志记录重放的页面分配操作实际上将 NULL 写入新分配的页面。)无论innodb_extend_and_initialize 设置如何,重做日志记录都是在分配页面之前写入的。

在非 Linux 系统和 Windows 上,InnoDB 将新页面分配给表空间并将 NULL 物理写入这些页面,这是默认行为。尝试 innodb_extend_and_initialize在这些系统上禁用会返回以下错误:

此平台不支持更改 innodb_extend_and_initialize。回退到默认值。