xxxxxxxx
(Hacker Z Vu Xy Nh8)
1
tidb版本 4.0.13
背景:有个表配置了tiflash,今天业务反馈查数的时候一直报【tiflash server timeout】,现在想重建一下这个表的tiflash数据。
1、先执行了下面的操作
alter table <db_name>.<table_name> set tiflash replica 0;
执行完毕后查【TIFLASH_REPLICA】表发现已经没有记录了。
2、然后执行
alter table <db_name>.<table_name> set tiflash replica 2;
执行完后发现【TIFLASH_REPLICA】表出现记录了,但是AVAILABLE | PROGRESS 都是1,看起来是set tiflash replica 0;没有生效,执行以后没有将数据从磁盘马上删除,猜测是有个生效时间,现在想了解一下这个生效时间是多久?
小龙虾爱大龙虾
(Minghao Ren)
2
松隐青峦
(松隐青峦)
3
在 TiDB 中,当执行 ALTER TABLE <table> SET TIFLASH REPLICA 0
时,系统会异步删除 TiFlash 上的副本数据。生效时间取决于 TiDB 的 GC (Garbage Collection) 机制和 TiFlash 自身的处理速度,默认情况下可能需要等待 10 分钟(GC 默认周期)或更久,具体流程如下:
1. **为什么 SET TIFLASH REPLICA 0
后数据未立即删除?
- GC 机制延迟:TiDB 依赖 GC 机制清理已删除数据,默认 GC 周期为 10 分钟。在 GC 触发前,TiFlash 可能仍保留旧数据。
- 异步删除:TiFlash 副本删除是后台任务,大量数据或高负载场景下删除可能延迟。
3. **重建 TiFlash 副本后为何 AVAILABLE=1
?
- 如果旧数据未被完全删除,重新设置副本数时,TiFlash 可能复用残留数据块,导致进度 (
PROGRESS
) 显示不准确。
- 此时查询可能因数据不一致触发超时,需确保旧数据完全删除后再重建副本。
4. **操作建议:
- 确认旧数据已删除:
-- 检查 TiFlash 副本状态(确保无记录)
SELECT * FROM information_schema.tiflash_replica WHERE TABLE_NAME = '<table_name>';
-- 观察 TiFlash 监控指标 "Store Size" 是否下降
2 个赞
有猫万事足
4

admin gc;
这个命令在tidb是不可用的。但考虑到上面这个回复中的其他部分有一定的道理,且比较全面,还是可以给最佳,只把错误的部分编辑掉了。
system
(system)
关闭
5
此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。