truncate 一张超大表

我有一张超大的日志表,大概30亿条记录,大小有十来个T,如果我直接truncate会对整个集群造成什么影响吗?比如io过大影响数据库查询之类的?

1 个赞

TRUNCATE操作是一个重量级操作,它会占用大量的CPU和I/O资源。可能会造成资源竞争,锁竞争,GC过程可能会占用大量I/O资源,影响集群的整体性。建议放到空闲时间段进行操作。

truncate 是一个逻辑上的操作,这个操作本身不会有 io 上的开销。

后续会通过 gc 去回收删掉的数据,这个时候会对集群的 io 有影响,但是 tikv 对这块有流控。

执行这个操作很快,但是要看这个操作后,gc的时间,gc的时间段放到业务空闲期

问题不大
1、truncate 时候本身是元数据操作,所以没啥影响
2、gc 的时候这种大部分也是物理删除,问题也不大,实在有影响就调整 gc 并发限制下

1 个赞

主要是对GC影响,如果影响了有个参数可以做流控

学习学习

truncate 影响不大,几十 T 也很稳

这个有实测过吗?
即便是元数据的操作,但几十TB,对应到元数据,也会有很多的region,要扫描这个表众多region的上下限,也会耗费PD的资源吧?若该库日常就比较繁忙,PD的资源使用也需要关注。
另外在GC时,对于这么大的空间回收,对于IO的波动也是需要关注的。
若是敏感应用,建议放在相对业务空闲时段来进行。

实际测试的效果如何,理论上 truncate 只是逻辑操作,但实际经验感觉数据量越大,语句执行的越慢

特意去问了下ai

有这种经历,以前用Oracle数据库,一个1T左右的日志表,truncate表执行到执行完成,用了很长的时间。

truncate随便执行,没有影响

truncate可以的

truncate完成,只有cpu有些许波动,磁盘读写100多M



image

1 个赞

truncate没啥消耗,底层rocksdb有个删除连续key的功能

可以通过参数,调整一下gc的并发。

执行时间约 4 h?

最佳答案都选好了,我也认同。
另外提醒一下要考虑truncate时候,1,这个表是否有高频的修改和删除,可能会影响truncate的执行。2,是否存在ddl队列排队。

执行时间有点过长哦。