Tidb按条件删除数据能释放磁盘空间吗,如DELETE FROM table_x WHERE id IN (xxxx,xx)

Tidb按条件删除数据能释放磁盘空间吗,如DELETE FROM table_x WHERE id IN (xxxx,xx)

https://docs.pingcap.com/zh/tidb/stable/sql-faq#tidb-中删除数据后会立即释放空间吗

1 个赞

delete不会释放磁盘空间,可以手动compact释放

1 个赞

这个操作会阻塞吗,数据量挺大

手动compact会占用大量磁盘而且也挺慢的,建议在业务低峰期操作。

在 TiDB 中使用 DELETETRUNCATEDROP 语句删除数据都不会立即释放空间。对于 TRUNCATEDROP 操作,在达到 TiDB 的 GC (garbage collection) 时间后(默认 10 分钟),TiDB 的 GC 机制会删除数据并释放空间。对于 DELETE 操作,TiDB 的 GC 机制会删除数据,但不会立即释放空间,而是等到后续进行 compaction 时释放空间。

2 个赞

可以的,delete后过先gc,再过一两天自动compact。手动compact效果很好但资源消耗很大生产业务慎用

1 个赞

根据我的测试经验,跑业务的 数据库不要手动compact,cpu和io都能给跑满了。删了数据放几天让数据库慢慢compact

空间不急的话,等待gc完成后自动compact吧。。。。

好的 ,谢谢了, 也就是可以先delete数据,让其自行释放 对吧

还有20% 但是无用数据太多 不想再扩容,想直接删除

剩余20%删的时候注意点,删除在tidb是写入数据,别短时间内删太多把硬盘写满了。
delete后几天观察磁盘空间看看释放情况。
如果想详细了解某个表的空间占用情况,可以查INFORMATION_SCHEMA.TIKV_REGION_STATUS视图,里面有t.APPROXIMATE_SIZE,t.APPROXIMATE_KEYS

还有20%的话比较危险了,建议先扩容,清理数据的话,delete还是慢,而且需要删除的数据很多才能通过自动compact清理出来点空间。

1 个赞

要清除的表结构 独占已用空间的80%左右 :rofl:

要删除部分数据的表 现有数据占已用空间的80%左右 :rofl:,,,也就是占了整个磁盘的70%左右了

那就慢慢来,一天删一部分,连续删除几天

删除之后,如果没有GC,不光空间不会释放,对查询可能会有影响(效率上的影响)

高版本的针对 MVCC 的版本做了修复,如果你要做删除操作,要考虑下这个问题

现在也不太好升级版本,24小时作业的,那最好的就是 先扩容节点,,扩容之后在进行删除嘛,

我先试试,删除一部分看看,同时准备好申请资源 扩容