异步删除大表
功能介绍
该功能主要用于在删除包含大量数据的表时,实现平滑删除,以避免IO的抖动。
开启该功能后,当通过DROP TABLE命令删除表时,系统会先将原数据库对应的.ibd文件重命名为一个新的临时文件,并立即返回操作成功的消息。系统随后会在后台分批次对该临时文件进行truncate处理,每次truncate的文件大小由innodb_rds_data_file_purge_max_size参数控制。
约束限制
- 该功能仅支持RDS for MySQL 8.0.32及更高版本。
- 由于删除操作变为异步处理,磁盘空间的释放将比功能启用前需要更长的时间。具体所需时间与表大小和单次truncate的文件大小、truncate周期相关。
参数介绍
| 参数名称 | 是否需要重启 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
| innodb_rds_data_file_purge | 否 | OFF | ON,OFF | 是否启用后台异步清理大文件策略。 |
| innodb_rds_data_file_purge_interval | 否 | 100 | 0~10000 | 异步清理线程调度的周期,单位:ms。 |
| innodb_rds_data_file_purge_max_size | 否 | 32 | 16~1073741824 | 异步清理线程每个周期清理的文件大小,单位:MB。 |
使用如下命令删除表:
drop table table_name;
使用如下命令查看清理进度:
select * from information_schema.rds_innodb_purge_files;
+--------+---------------------+---------------------+---------------+---------------------+--------------+ | log_id | start_time | original_path | original_size | temporary_path | current_size | +--------+---------------------+---------------------+---------------+---------------------+--------------+ | 76 | 2025-11-11 21:20:19 | ./file_purge/t1.ibd | 146800640 | ./#FP_1762772250_9 | 46137344 |
| 参数 | 说明 |
|---|---|
| start_time | 清理操作的开始时间。 |
| original_path | 表数据文件的原始路径。 |
| original_size | 表数据文件的原始大小,单位:byte。 |
| temporary_path | 清理中的临时文件路径。 |
| current_size | 待清理的剩余临时文件大小,单位:byte。 |