GreatSQL社区

搜索

[已解决] 测试体验GreatSQL异步删除大表特性

881 0 2024-3-5 15:21
GreatSQL 8.0.32-25中新增异步删除大表特性:



在删除InnoDB大表(通常是指超过10G的表)时,由于InnoDB引擎的I/O操作会受到OS层删除文件的影响,进而导致InnoDB的稳定性出现波动。

为了避免此问题,解决思路是启动一个后台线程来异步缓慢地删除数据文件。

此外,在删除InnoDB表时,会将对应的数据文件先重命名为临时文件,并使用DDL LOG保证crash safe,删除表空间操作立即返回结果,清除线程将异步、缓慢地删除临时文件。

通过修改系统选项的方式开启异步删除大表的功能,可以通过查询系统表展示临时文件清理进度。

目前只有InnoDB引擎支持异步删除大表特性。默认地,即便是没开启该特性开关,但在删除超过10GB的大表也会自动启用该特性,所以完全不用担心。


详见文档:InnoDB异步删除大表特性 | GreatSQL用户手册

有社区用户问,这个特性能否支持表分区的删除,那我们就来实操体验下:


  1. -- 表结构和数据从TPC-H.lineitem中复制,增加aid列并改成RANGE分区表
  2. -- 每个分区约存储1千万行数据
  3. greatsql> show create table t1 \G
  4. *************************** 1. row ***************************
  5.        Table: t1
  6. Create Table: CREATE TABLE `t1` (
  7.   `aid` bigint unsigned NOT NULL AUTO_INCREMENT,
  8.   `l_orderkey` int NOT NULL,
  9.   `l_partkey` int NOT NULL,
  10.   `l_suppkey` int NOT NULL,
  11.   `l_linenumber` int NOT NULL,
  12.   `l_quantity` decimal(15,2) NOT NULL,
  13.   `l_extendedprice` decimal(15,2) NOT NULL,
  14.   `l_discount` decimal(15,2) NOT NULL,
  15.   `l_tax` decimal(15,2) NOT NULL,
  16.   `l_returnflag` char(1) NOT NULL,
  17.   `l_linestatus` char(1) NOT NULL,
  18.   `l_shipdate` date NOT NULL,
  19.   `l_commitdate` date NOT NULL,
  20.   `l_receiptdate` date NOT NULL,
  21.   `l_shipinstruct` char(25) NOT NULL,
  22.   `l_shipmode` char(10) NOT NULL,
  23.   `l_comment` varchar(44) NOT NULL,
  24.   PRIMARY KEY (`aid`)
  25. ) ENGINE=InnoDB AUTO_INCREMENT=30006076 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
  26. /*!50100 PARTITION BY RANGE (`aid`)
  27. (PARTITION p0 VALUES LESS THAN (10006075) ENGINE = InnoDB,
  28. PARTITION p1 VALUES LESS THAN (20006075) ENGINE = InnoDB,
  29. PARTITION p2 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */

  30. -- 查看各分区大小,每个分区2.4G
  31. -rw-r-----  1 mysql mysql 2.4G Mar  5 15:08 t1#p#p0.ibd
  32. -rw-r-----  1 mysql mysql 2.4G Mar  5 15:09 t1#p#p1.ibd
  33. -rw-r-----  1 mysql mysql 2.4G Mar  5 15:10 t1#p#p2.ibd

  34. -- 修改设置,超过1GB就会自动启用异步删除特性
  35. greatsql> show global variables like '%async_%';
  36. ...
  37. | innodb_data_force_async_purge_file_size                      | 1073741824 |

  38. -- 删除分区p1,秒级完成
  39. greatsql> alter table t1 drop partition p1;
  40. Query OK, 0 rows affected (0.02 sec)
  41. Records: 0  Duplicates: 0  Warnings: 0

  42. 查看日志
  43. 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
  44. 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
  45. 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
  46. 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
复制代码



以上。
全部回复(0)
yejr

36

主题

1

博客

1228

贡献

管理员

Rank: 9Rank: 9Rank: 9

积分
2366

助人雷锋社区智多星勤学好问(铜)好评如潮(铜)

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2024-11-23 20:14 , Processed in 0.021126 second(s), 14 queries , Redis On.
快速回复 返回顶部 返回列表