原理是这样:
TiFlash 本身会自动在后台执行 compact 操作,compact 操作会优化数据文件的组织形态,回收已经过期的数据版本,所以能提高查询性能。但是自动执行的 compact 是有一定的触发阀值的,比如 delta 数据量操作一定大小才会触发,否则就会产生很大的写放大。也就是说,如果一张表没人任何数据写入了,虽然它的数据形态不是最优的,但是 TiFlash 也不会去自动 compact 它。
这次提供的手动 compact 命令,和后台自动 compact 做的事情其实是一样的,只不过可以通过 SQL 主动触发。所以它没啥副作用,唯一的影响是它在运行的生活会消耗一定的系统资源。目前默认只有 1 个并行度
通常手动 compact 用于不频繁更新的表,比如每天导入一次,然后 compact 一下。对于频繁更新的表,手动 compact 之后对性能的影响不太明显(因为 TiFlash 自己就会做了),当然跑一下也没啥问题。
https://docs.pingcap.com/zh/tidb/stable/sql-statement-alter-table-compact#alter-table--compact