文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  优化 Linux 上的表空间空间分配

17.6.3.8 优化 Linux 上的表空间空间分配

您可以优化 InnoDB 在 Linux 上为每个表一个文件和通用表空间分配空间的方式。默认情况下,当需要更多空间时,InnoDB 会将页面分配给表空间,并在物理上将 NULL 写入这些页面。如果频繁分配新页面,此行为可能会影响性能。您可以在 Linux 系统上禁用 innodb_extend_and_initialize,以避免将 NULL 物理写入新分配的表空间页面。禁用 innodb_extend_and_initialize 后,将使用 posix_fallocate() 调用将空间分配给表空间文件,该调用会保留空间,而不会物理写入 NULL。

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

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

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

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