操作指南

API 文档

诚邀爱技术、爱分享的你,成为文档内容共建者> HOT

功能介绍

该功能主要用于删除数据文件很大的表,避免 IO 的抖动。

DROP TABLE 会将原数据库文件 (.ibd) 重命名为一个新的临时文件并返回成功,临时文件存放在 innodb_async_drop_tmp_dir 指定的目录下,并在后台分批次 truncate,每次 truncate 的文件大小由 innodb_async_truncate_size 控制,异步删表功能的开启由 innodb_async_truncate_work_enabled 参数控制。

该功能无需用户操作,由内核自动完成,其原理是在删除表时,为表的数据文件在另外一个目录中创建一个硬连接。当执行 drop table 后,删除的只是该文件的一个硬连接。之后后台线程扫描到硬连接目录中有需要删除的文件,自动在后台 truncate 前面 drop 掉表数据文件。

支持版本

  • 内核版本 MySQL 5.6 20220303 及以上
  • 内核版本 MySQL 5.7 20190203 及以上
  • 内核版本 MySQL 8.0 20200630 及以上

适用场景

该功能适用于需要删除的表数据文件很大的场景。

使用说明

  • MySQL 5.6、5.7 版本,通过设置 innodb_async_truncate_work_enabled 为 ON,DROP TABLE 即会变成异步模式,默认值为 OFF。
  • MySQL 8.0 版本,通过设置 innodb_table_drop_mode 为 ASYNC_DROP,DROP TABLE 即会变成异步模式,默认值为 SYNC_DROP。
  • 每次 truncate 的文件大小由 innodb_async_truncate_size 控制(MySQL 5.6 版本暂不支持)。
  • 打开 innodb_fast_ddl 参数后,可以让异步删除大表能力更高效。
参数名动态类型默认参数值范围说明
innodb_async_truncate_work_enabledYesstringOFFON/OFF是否开启异步清理大表。
说明:

用户目前无法直接修改以上参数的参数值,如需修改可 提交工单 进行修改。

目录