Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Optimizing Tablespace Space Allocation on Linux

17.6.3.8 Linux上优化表空间分配

您可以在Linux上优化InnoDB对文件表和通用表空间的空间分配。默认情况下,当需要额外空间时,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_IZE配置”

InnoDB 在分配新表空间页之前写入redo日志记录。如果页面分配操作被中断, recovery 过程将从 redo 日志记录重新播放该操作。 (从 redo 日志记录重新播放的页面分配操作实际上会将 NULL 写入到新分配的页面中。) 无论是不是设置了innodb_extend_and_initialize,都将在分配页之前写入 redo 日志记录。

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

不支持在该平台上更改 innodb_extend_and_initialize。将回退到默认行为。