TiDB 客户端执行查询出现 “snapshot is outdated” 报错故障

报表系统执行一条耗时半小时的历史统计查询,中途直接抛出 snapshot is outdated 报错导致任务失败;日常快速的单条查询、增改操作均不会出现该报错,集群 GC 配置使用默认值,TiKV 负载正常。

拉长集群 GC 保留时长,适配长报表查询的耗时,给旧版本数据足够留存时间
报表业务拆分超大查询,拆成小段分页统计,单次执行时长控制在 GC 保留窗口以内
报表查询开启只读快照隔离,手动指定较新的稳定时间点读取,避开过期旧快照
针对报表库单独设置更长 GC 策略,不影响线上交易库的垃圾回收效率

snapshot is outdated 报错是因为 TiDB 默认 GC 生命周期tikv_gc_life_time为 10 分钟,你的报表查询耗时半小时,查询启动时的快照时间早于 GC 安全点,对应历史数据版本已被 GC 清理。优先优化报表查询,通过添加合适索引、拆分大查询为分页分批统计缩短单次执行时长;若业务必须长时间读取历史数据,可临时调大tikv_gc_life_time,或使用SET @@tidb_snapshot = "对应历史时间点"固定快照后执行查询,避免查询运行中 GC 回收所需数据版本,同时不建议长期放大 GC 保留窗口,防止集群 MVCC 版本堆积引发磁盘与性能问题。

某个TiKV宕机时间长会导致safepoint停滞。

空间回收基于MVCC GC策略,GC worker定期清理过期版本。

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