tikv 手动执行compact,空间不断增长,最终磁盘满,compact失败

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】4.0.8

【问题描述】
tidb集群更换几个节点之后,发现空间增长很多(数据量并没有增加很多),查看监控发现替换节点之后,压缩率下降。使用调用命令 tiup ctl tikv compact -d kv 手动做compact时,tikv节点磁盘空间不断增长,最终空间满导致compact 失败。compact过程是压缩完全量数据再删除原数据吗 ?

使用范围压缩的话,按region一个个压缩太慢,压缩率可能也不是很好。使用范围 raw key压缩,key的格式具体是怎样的。是tiup ctl tikv --to-escaped 转换key,转换后的全部字符串吗?

➜   tiup ctl tikv --to-escaped '0x7480000000000000FF415F698000000000FF0000010131303230FF30353232FF373838FF3530393230FF0000FF000000000000F703FF800000016D6739F4FF0000000000000000F7'
Starting component `ctl`: /home/tidb/.tiup/components/ctl/v5.0.0-rc/ctl tikv --to-escaped 0x7480000000000000FF415F698000000000FF0000010131303230FF30353232FF373838FF3530393230FF0000FF000000000000F703FF800000016D6739F4FF0000000000000000F7
t\200\000\000\000\000\000\000\377A_i\200\000\000\000\000\377\000\000\001\0011020\3770522\377788\37750920\377\000\000\377\000\000\000\000\000\000\367\003\377\200\000\000\001mg9\364\377\000\000\000\000\000\000\000\000\367

compact help命令显示

-t, --to <to>                    Raw key (generally starts with "z") in escaped form

需要加z开头吗

Compaction 过程中会需要临时存储空间,所以会有空间放大的现象,Compaction 完的话会释放的。
这个 generally start with “z” 表示的是 escaped raw key 一般是 z 开头的,类似于

不过我试了下直接通过 --to-escaped 转换的结果进行 compaction 是可以的

$ tiup ctl tikv --host 172.16.5.215:30165 compact -d kv -f 't\200\000\000\000\000\000\000\377\021\000\000\000\000\000\000\000\370' -t 't\200\000\000\000\000\000\000\377\023\000\000\000\000\000\000\000\370'
Starting component `ctl`: /Users/shengang/.tiup/components/ctl/v5.0.0-rc/ctl tikv --host 172.16.5.215:30165 compact -d kv -f t\200\000\000\000\000\000\000\377\021\000\000\000\000\000\000\000\370 -t t\200\000\000\000\000\000\000\377\023\000\000\000\000\000\000\000\370
store:"172.16.5.215:30165" compact db:Kv cf:default range:[[116, 128, 0, 0, 0, 0, 0, 0, 255, 17, 0, 0, 0, 0, 0, 0, 0, 248], [116, 128, 0, 0, 0, 0, 0, 0, 255, 19, 0, 0, 0, 0, 0, 0, 0, 248]) success!

是可以执行,只是好像不是范围内的key都会压缩?我把key都列出来,按顺序排序,取1 ~ 10000 key执行,很快就返回来,几秒钟。这个tikv节点有9万多个key,有执行压缩的话不会这么快。
全量压缩时,30分钟都没压缩完,因为磁盘满而退出来。

可以分批全量压缩一遍看下效果确认数据是否被压缩,分批压缩与全量压缩不一定是线性关系。

怎么分批全量压缩?

我是指 1~10000 key 压缩 10001~20000 key 压缩

tiup ctl tikv compact -c write -d kv 使用这个命令压缩 write 类型的数据,就能顺利压缩,临时空间不会涨的太厉害。

:+1::+1::+1: