文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  在 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 在此平台上不受支持。回退到默认值。