这个设计是不太合理。
这个问题出现的原因是,我们默认 GC 的时候设置得不是太长(20min),否则有可能数据版本太多,影响性能。
但是有时候又有一些需要执行很长时间的后台任务,比如这里的 analyze,当集群规模稍大以后可能就要超 20min 了。以前的 analyze 工作在一个版本的 snapshot 上面,而 GC 把那个超过了 20min 的 snapshot 删除了,就出错了。
这个问题预期会在 6.2 版本中修复掉。
6.2 中 analyze 会将使用 max int64 的 tso,而不是一个快照的 tso。这样 analyze 分析的准确性会降低,不过对于 analyze 这个场景可以接受。
旧版本里面 workaround 可以把 gc 时间调长一些,或者不要弄 auto analyze,而是手动去 analyze