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  /  ...  /  Optimizing Tablespace Space Allocation on 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 在分配新表空间页面之前写入 redo 日志记录。如果页面分配操作被中断,操作将从 redo 日志记录中重放恢复。(从 redo 日志记录中重放的页面分配操作将物理写入 NULL 到新分配的页面。)无论 innodb_extend_and_initialize 设置如何,redo 日志记录总是写入在分配页面之前。

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

在该平台上不支持更改 innodb_extend_and_initialize。回退到默认设置。