您可以优化 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。回退到默认值。