删除大量数据后空间回收慢,tikv_gc_last_run_time、tikv_gc_safe_point的值异常

为提高效率,提问时请尽量提供详细背景信息,问题描述清晰可优先响应。以下信息点请尽量提供:

  • 系统版本 & kernel 版本:
  • TiDB 版本: Release Version: v2.1.13 Git Commit Hash: 6b5b1a6802f9b8f5a22d8aab24ac80729331e1bc Git Branch: HEAD UTC Build Time: 2019-06-21 12:27:08 GoVersion: go version go1.12 linux/amd64 Race Enabled: false TiKV Min Version: 2.1.0-alpha.1-ff3dd160846b7d1aed9079c389fc188f7f5ea13e Check Table Before Drop: false
  • 磁盘型号:
  • 集群节点分布: 2db、3pd、8kv
  • 数据量 & region 数量 & 副本数: 存储占用7.2TB、1050000region、3副本
  • 集群 QPS、.999-Duration、读写比例:
  • 问题描述(我做了什么): 删除大量数据后发现空间回收较慢,然后根据官方文档准备调整gc时间和并发度参数时发现tikv_gc_last_run_time、tikv_gc_safe_point的值异常: tidb-gc 查看tidb.log,报错如下:

OK. 这个我们看看

Hi. @tureo 你有 8 个tikv,可以把 tikv_gc_concurrency 调高到8. 另外 region 数量太多,可能 raftstore 压力过大了,能否看看你这边的 raftstore cpu 指标.

压力确实较大,加快空间回收速度我可以调整tikv_gc_concurrency,但tikv_gc_last_run_time、tikv_gc_safe_point这两个值异常和tidb日志中报的信息有什么影响吗?

Hi. @tureo 根据日志 GC 目前已经持续了 241 个小时,这和表中的 tikv_last_run_time 是对的上的,这两个值本身没有异常。异常的是这个 GC 速度实在太慢,照这个速度算 GC 一轮要一个多月。

建议先想办法降低 raftstore 的压力,比如开启 merge,把 raft-base-tick-interval 调长到两到三秒,或者升级到 3.0 版本。

另外,调整后的 tikv_gc_concurrency 会在下次 GC 时生效。如果 raftstore 的压力成功降下来之后 GC 速度仍然太慢,希望立即生效的话,需要通过重启 GC leader 进程的方式来终止本次 GC。GC leader 即 tikv_gc_leader_desc 所指的那台 TiDB,也就是产生上面截图中日志的那台 TiDB。如果要重启它请先确认不会对业务造成影响。

降低raftstore压力还有个办法是扩容:rofl:

好的,谢谢解答。 我们这边先按您的建议修改参数开启merge:config set max-merge-region-size 16、config set max-merge-region-keys 50000; raft-base-tick-interval这个配置项在我们现在用的v2.1.13版本中的tikv.yml中不存在,搜索官方文档也未发现在v2.1中有这个配置项; 我们暂时不能升级tidb版本,后面会考虑升级到v2.1最新版本或者v3.0版本; 已调整tikv_gc_concurrency为4; 因为集群无法扩容,所以只能修改参数进行调整; raft压力和GC回收效果待查看,如有必要我们会重启GCleader所在TiDB节点。

这个配置一直有的,不过没有在 tikv.yml 里面,目前可以先不用改,先看看已经改的效果吧:grin:

目前来看开启merge后region数量在缓慢减少,但PD页面和OVERVIEW页面显示的region数量并不一致且相差较大;

可能因为我们写入数据量比较大的问题,raft压力并没有下降;

昨天调整参数后重启了GCleader所在TiDB节点,现在看来还是GC回收慢、raft压力大的问题。 gc

我看之前的GC回收一轮下来都要很久,是否有其他方法提高GC的速度?

  • 实际 Region 数量以 PD 页面为准。Overview 页面的那个统计了 Region 所有副本的数量,所以大约是 PD 页面的三倍。这里可能有问题,我们内部正在确认然后 fix。
  • 等待 raftstore 降下来可能需要较长时间。可以考虑将 merge 开得更快一些。
  • 对于 8 个 TiKV 节点的集群,可以将并发调至 8。目前 2.x 版本没有其它提高 GC 速度的机制。
  • 我们不确定您的写入压力有多大,如果足够大的话可能等 merge 稳定下来以后 raftstore 仍然是瓶颈。3.0 版本对于 raftstore 和 GC 都有显著的优化。既然无法扩容,如果可能还是建议考虑一下升级。

好的,那我们先修改相关参数,后续尝试升级到高版本。