tiflash set tiflash replica 0需要多久生效

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;没有生效,执行以后没有将数据从磁盘马上删除,猜测是有个生效时间,现在想了解一下这个生效时间是多久?

操作是异步的,需要等 GC 过后才能清理,可以观察 grafana 的 PD 面板的监控情况,参考:https://docs.pingcap.com/zh/tidb/stable/troubleshoot-tiflash/#缩容-tiflash-节点慢

在 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. **操作建议:

  1. 确认旧数据已删除
    -- 检查 TiFlash 副本状态(确保无记录)
    SELECT * FROM information_schema.tiflash_replica WHERE TABLE_NAME = '<table_name>';
    
    -- 观察 TiFlash 监控指标 "Store Size" 是否下降
    
2 个赞

image

admin gc;

这个命令在tidb是不可用的。但考虑到上面这个回复中的其他部分有一定的道理,且比较全面,还是可以给最佳,只把错误的部分编辑掉了。

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。