您可以优化 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 在此平台上不受支持。回退到默认值。