针对一张20亿的大业务表,想清理删除业务上作废的数据(涉及9000w+)-释放表空间,有什么较好的办法吗?

:flushed:确实没有实践,是在地区交流上看到的。有时间实践一下看看

装个单机版试试很简单。原理上tikv是有序kv存储,delete的数据实际上compact还在呢,limit从前往后找,前面key删除了但底层还存在,就一直往后找没删除的。随着删除数据量增加,从前往后找到的无效key就越来越多

业务低谷期,少量分批处理。写个定时任务慢慢处理了

直接删分区或者批量慢慢删,9000w也不多

TiDB 从 v6.1.0 版本开始支持非事务 DML 语句特性。 BATCH ON {shard_column} LIMIT {batch_size} {delete_statement};

如果想回收,磁盘空间,可以先建一张同构到表,建立ticdc链路拉平数据。换表,然后truncate table即可

你猜9000w而已。。1天就能删完。我们有350亿数据 要做历史数据分离,我要删除170亿数据,也是按日期 删除加一个limit 10000 24小时X7 已经删了20亿了。一天大概删了1.5亿

分批删除,不然很慢

mark一下

建议采用小批量,分批次删除的方式,对生产环境影响较小。尽量再窗口维护时间0:00-6:00这个时间段执行。