前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

MYSQL存储引擎InnoDB(三十八):在 Linux 上优化表空间的空间分配

qiguaw 2025-03-13 19:43:49 资源文章 32 ℃ 0 评论

从 MySQL 8.0.22 开始,您可以优化InnoDB在Linux上为独立表空间和通用表空间的分配空间方式。默认情况下,当需要额外空间时, InnoDB将页面分配给表空间并将 NULL 物理写入这些页面。如果频繁分配新页面,此行为可能会影响性能。从 MySQL 8.0.22 开始,您可以在 Linux 系统上禁用
innodb_extend_and_initialize以避免将 NULL 物理写入新分配的表空间页面。禁用
innodb_extend_and_initialize时 ,使用 posix_fallocate()将空间分配给表空间文件,这会保留空间而无需物理写入 NULL。

使用 posix_fallocate()调用分配页面时,默认情况下扩展大小很小,并且通常一次只分配几个页面,这可能会导致碎片并增加随机 I/O。为避免此问题,请在启用posix_fallocate()调用时增加表空间扩展大小。使用AUTOEXTEND_SIZE选项可以将表空间扩展大小增加到 4GB 。

InnoDB在分配新的表空间页面之前写入重做日志记录。如果页面分配操作被中断,则在恢复期间从重做日志记录中重放该操作。(从重做日志记录重放的页面分配操作将 NULL 物理写入新分配的页面。)不管
innodb_extend_and_initialize 设置如何,都会在分配页面之前写入重做日志记录。

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

此平台不支持更改
innodb_extend_and_initialize。回退到默认值。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表