调整tikv_gc_life_time后报错: destroy range on store failed with error

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】v3.0.8

【问题描述】把tikv_gc_life_time 从720h缩短为2h后,tidb日志报错:

[gc worker] destroy range on store failed with error

看代码这里配置5分钟超时:
https://github.com/pingcap/tidb/blob/dbc5b4f5d1829cc72c349a0eb78f22b3f881eb39/store/tikv/client.go#L52-L53

请问如何进一步查看当前gc worker状态是否正常?


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

  1. 完整的 TiDB 日志是否可以提供一下
  2. gc worker 状态可以通过在 tidb.log 和 tikv.log 中 grep ‘gc_worker’ 关键字查看,也可以看下 select VARIABLE_NAME, VARIABLE_VALUE from mysql.tidb where VARIABLE_NAME like “tikv_gc%”; 的结果

看日志已经执行完成了:

finish redo-delete ranges"]  [uuid=xxx] ["num of ranges"=4365"] ["cost time"=3h1m34.xxx]

嗯,应该是调整时间跨度过大,GC 需要清理的数据应该比较多。

看结果是这样的。
1、TiKV UnsafeDestroyRange 这个接口是异步的吗?
2、如何观测tikv destroy range进度,或者评估gc耗时?
3、如果gc时间太久已影响业务,能否中途取消?

  1. 是异步的
  2. 进度问题可以参考下:TiDB 写入慢流程排查系列(六)— GC 机制
  3. GC 不可以取消,但是可以控制 GC 流控:https://docs.pingcap.com/zh/tidb/stable/garbage-collection-configuration#流控
1赞