GreatSQL 8.0.32-25中新增异步删除大表特性:
在删除InnoDB大表(通常是指超过10G的表)时,由于InnoDB引擎的I/O操作会受到OS层删除文件的影响,进而导致InnoDB的稳定性出现波动。
为了避免此问题,解决思路是启动一个后台线程来异步缓慢地删除数据文件。
此外,在删除InnoDB表时,会将对应的数据文件先重命名为临时文件,并使用DDL LOG保证crash safe,删除表空间操作立即返回结果,清除线程将异步、缓慢地删除临时文件。
通过修改系统选项的方式开启异步删除大表的功能,可以通过查询系统表展示临时文件清理进度。
目前只有InnoDB引擎支持异步删除大表特性。默认地,即便是没开启该特性开关,但在删除超过10GB的大表也会自动启用该特性,所以完全不用担心。
详见文档:InnoDB异步删除大表特性 | GreatSQL用户手册
有社区用户问,这个特性能否支持表分区的删除,那我们就来实操体验下:
- -- 表结构和数据从TPC-H.lineitem中复制,增加aid列并改成RANGE分区表
- -- 每个分区约存储1千万行数据
- greatsql> show create table t1 \G
- *************************** 1. row ***************************
- Table: t1
- Create Table: CREATE TABLE `t1` (
- `aid` bigint unsigned NOT NULL AUTO_INCREMENT,
- `l_orderkey` int NOT NULL,
- `l_partkey` int NOT NULL,
- `l_suppkey` int NOT NULL,
- `l_linenumber` int NOT NULL,
- `l_quantity` decimal(15,2) NOT NULL,
- `l_extendedprice` decimal(15,2) NOT NULL,
- `l_discount` decimal(15,2) NOT NULL,
- `l_tax` decimal(15,2) NOT NULL,
- `l_returnflag` char(1) NOT NULL,
- `l_linestatus` char(1) NOT NULL,
- `l_shipdate` date NOT NULL,
- `l_commitdate` date NOT NULL,
- `l_receiptdate` date NOT NULL,
- `l_shipinstruct` char(25) NOT NULL,
- `l_shipmode` char(10) NOT NULL,
- `l_comment` varchar(44) NOT NULL,
- PRIMARY KEY (`aid`)
- ) ENGINE=InnoDB AUTO_INCREMENT=30006076 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
- /*!50100 PARTITION BY RANGE (`aid`)
- (PARTITION p0 VALUES LESS THAN (10006075) ENGINE = InnoDB,
- PARTITION p1 VALUES LESS THAN (20006075) ENGINE = InnoDB,
- PARTITION p2 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
- -- 查看各分区大小,每个分区2.4G
- -rw-r----- 1 mysql mysql 2.4G Mar 5 15:08 t1#p#p0.ibd
- -rw-r----- 1 mysql mysql 2.4G Mar 5 15:09 t1#p#p1.ibd
- -rw-r----- 1 mysql mysql 2.4G Mar 5 15:10 t1#p#p2.ibd
- -- 修改设置,超过1GB就会自动启用异步删除特性
- greatsql> show global variables like '%async_%';
- ...
- | innodb_data_force_async_purge_file_size | 1073741824 |
- -- 删除分区p1,秒级完成
- greatsql> alter table t1 drop partition p1;
- Query OK, 0 rows affected (0.02 sec)
- Records: 0 Duplicates: 0 Warnings: 0
- 查看日志
- 2024-03-05T15:11:13.529985+08:00 13518 [Note] [MY-011066] [InnoDB] File purge : generate file : origin path : ./tpch/t1#p#p1.ibd, new path : /GreatSQL/mgr01/#file_purge/#FP_1708322043_19
- 2024-03-05T15:11:13.532810+08:00 13518 [Note] [MY-011066] [InnoDB] File purge : write log : log_id=428, new file path : /GreatSQL/mgr01/#file_purge/#FP_1708322043_19
- 2024-03-05T15:11:13.535121+08:00 13518 [Note] [MY-011066] [InnoDB] File purge : add file : add file to purge list, log_id=428, path : /GreatSQL/mgr01/#file_purge/#FP_1708322043_19
- 2024-03-05T15:11:14.436091+08:00 0 [Note] [MY-011066] [InnoDB] File purge : remove file : log_id=428, path : /GreatSQL/mgr01/#file_purge/#FP_1708322043_19
复制代码
以上。
|