使用truncate或者delete删除表后数据怎么清理

使用truncate或者delete删除表后发现系统文件数据还在,这个要怎么配置让数据文件也删除呢?

到了gc 时间gc worker 会清理

1 个赞

gc默认10min 10min后集群统一清理删除

truncate等gc后会自动释放,delete的数据不会释放磁盘空间

标记,等待gc回收清理标记后的数据

这个只能被动等gc吗? 有没有主动手动类似oracle move 或者手动发起shrink 的语句,主动出击

MVCC + GC + SST 估计没法手动彻底删除底层数据

truncate gc以后硬盘空间释放,delete不释放,gc时间过了以后执行清理

1 个赞

不能,gc时间最短可以设置10分钟,默认也是10分钟

设置这么短时间有点危险

tidb把mvcc数据和正常数据放一起,时间设置长了影响性能

大佬们,事务删除和SQL删除应该都要经过GC吧?

数据库会自动清理

用shell只对oltp.sbtest8这个表(对应换成你的表名)做compact ,加-c write -d kv

mysql -uroot -pXXX -hxxx -PXXX information_schema -e “select region_id from tikv_region_status where db_name=‘oltp’ and table_name=‘sbtest8’”>region_list
cat region_list|while read line
do
tiup ctl:v6.5.1 tikv --host xxxx:20160 compact -r $line -d kv -c write --threads 1 --bottommost force
tiup ctl:v6.5.1 tikv --host xxx:20160 compact -r $line -d kv -c default --threads 1 --bottommost force
done

1 个赞

好的,多谢,这个是我想要看到的。

我又查了下文档,我看到对Tiflash 有可以简单的操作 ALTER TABLE … COMPACT 但是还不支持tikv

#r ALTER TABLE … COMPACT

TiDB 存储节点在后台会自动发起数据整理(Compaction)。数据整理时,表中的物理数据会被重写,如清理已删除的数据、合并多版本数据等,从而可以获得更高的访问性能,并减少磁盘空间占用。使用 ALTER TABLE ... COMPACT 语句可以立即对指定的表进行数据整理,而无需等待后台触发。

该语句执行时不会阻塞现有 SQL 语句的执行或 TiDB 功能的使用,包括事务、DDL、GC 等,也不会改变通过 SQL 语句访问获得的数据内容。该语句执行时会消耗一定量的 IO 及 CPU 资源,请注意选择合适的时机执行,如资源空闲时段,避免对业务造成负面影响。

该语句会等待表中所有副本都数据整理完毕后才结束运行并返回。在执行过程中,你可以通过 KILL 语句安全地中断本张表的数据整理过程。中断不会破坏数据一致性或丢失数据,也不会影响后续重新发起或自动触发后台数据整理。

目前该语句仅支持对 TiFlash 进行数据整理,不支持对 TiKV 进行数据整理。

对的,这个语句目前只对tiflash生效

数据库会自动清理的吧,参数可以设置