Tidb按条件删除数据能释放磁盘空间吗,如DELETE FROM table_x WHERE id IN (xxxx,xx)
delete不会释放磁盘空间,可以手动compact释放
这个操作会阻塞吗,数据量挺大
手动compact会占用大量磁盘而且也挺慢的,建议在业务低峰期操作。
在 TiDB 中使用 DELETE
,TRUNCATE
和 DROP
语句删除数据都不会立即释放空间。对于 TRUNCATE
和 DROP
操作,在达到 TiDB 的 GC (garbage collection) 时间后(默认 10 分钟),TiDB 的 GC 机制会删除数据并释放空间。对于 DELETE 操作,TiDB 的 GC 机制会删除数据,但不会立即释放空间,而是等到后续进行 compaction 时释放空间。
可以的,delete后过先gc,再过一两天自动compact。手动compact效果很好但资源消耗很大生产业务慎用
根据我的测试经验,跑业务的 数据库不要手动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清理出来点空间。
要清除的表结构 独占已用空间的80%左右
要删除部分数据的表 现有数据占已用空间的80%左右 ,,,也就是占了整个磁盘的70%左右了
那就慢慢来,一天删一部分,连续删除几天
删除之后,如果没有GC,不光空间不会释放,对查询可能会有影响(效率上的影响)
高版本的针对 MVCC 的版本做了修复,如果你要做删除操作,要考虑下这个问题
现在也不太好升级版本,24小时作业的,那最好的就是 先扩容节点,,扩容之后在进行删除嘛,
我先试试,删除一部分看看,同时准备好申请资源 扩容