yejr 发表于 2024-3-5 15:21:05

测试体验GreatSQL异步删除大表特性

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 Mar5 15:08 t1#p#p0.ibd
-rw-r-----1 mysql mysql 2.4G Mar5 15:09 t1#p#p1.ibd
-rw-r-----1 mysql mysql 2.4G Mar5 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: 0Duplicates: 0Warnings: 0

查看日志
2024-03-05T15:11:13.529985+08:00 13518 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 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 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 File purge : remove file : log_id=428, path : /GreatSQL/mgr01/#file_purge/#FP_1708322043_19


以上。
页: [1]
查看完整版本: 测试体验GreatSQL异步删除大表特性