tidb数据量不大,但存在大量sst文件占用磁盘,怎么才能释放磁盘空间?

【 TiDB 使用环境】
【 TiDB 版本】v6.5.0
【遇到的问题:数据库磁盘使用率达到90%后将大表数据备份到其他服务器,然后drop重建,数据库数据只剩几十G,但磁盘使用空间还是占用400多G,存在大量sst文件,查看了GC,GC正常执行,但磁盘空间一直被占用】
【资源配置】
【附件:截图/日志/监控】



可以手工清理 参考
https://docs.pingcap.com/zh/tidb/dev/tikv-control/#手动-compact-单个-tikv-的数据

1 个赞

执行tikv-ctl --host ip:port compact -d kv 提示成功,磁盘大小也没有减少

看看grafana中pd的监控,是不是有大量的empty region?

再等等,就回收了

监控上看empty region很少

之前也是这么想的,清理数据清理了几百G,最开始磁盘下来了几十个G,后面等了几天都没再下降,反而磁盘使用一直变多

tikv-ctl --data-dir /path/to/tikv compact --db kv

提示成功,磁盘没有减少

SELECT
ROUND(SUM(total_size / cnt), 2) Approximate_Size,
ROUND(SUM(total_size / cnt / (SELECT
ROUND(AVG(VALUE), 2)
FROM
METRICS_SCHEMA.store_size_amplification
WHERE
VALUE > 0)),
2) Disk_Size
FROM
(SELECT
region_id,
SUM(Approximate_Size) total_size,
COUNT(*) cnt
FROM
information_schema.TIKV_REGION_STATUS
GROUP BY region_id) tabinfo
;
看一下多大

1、 数据库里任何查看表大小方式都是不准确的,不能以此为准
2、 压缩方式
tikv-ctl --host tikv_ip:port compact -c write -d kv --bottommost force
tikv-ctl --host tikv_ip:port compact -c default -d kv --bottommost force
3、 gc往前推进,第2步跑完了大小还没变化那就是这么大了 考虑扩容

2 个赞

那基本就是这么大了,你上面的sql统计是mysql的,在tidb里面不准的,用我这个查,要稍微准一点,当然最准的就是上主机上看sst大小

清理了之前好几个月的数据,理论上不应该才几天磁盘又和清理之前使用率一样,日增数据基本没变的

看起磁盘是感觉就是这么大,但是才清理了几个月的数据(那时候一个KV节点400多G使用),才过几天数据库整体数据量比清理之前是小了很多的,但是磁盘使用是一样的了,感觉像有些没释放

按我的方式做compact 要加 --bottommost force

加上了执行完后磁盘也没有减少,看监控主要是write占了很多,感觉像历史版本没有被回收

监控 TiKV Detail → GC. 再找一个修改比较多的表explain analyze select count(*)看下

找到原因了,有一张表很小,但是一直在更新,历史版本占了很多,把那张表删了就好了

2 个赞

历史版本不被清理也是问题,你的gc 才10分钟 正常情况不应该有这么多历史版本,建议升级下

1 个赞