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。将回退到默认行为。