rockdb delete太高导致sql延迟变高

请再次仔细检查下公式是 (),而不是 {} !

是的 写错了

感觉没什么异常

另外我感觉是不是gc线程的原因导致的,目前gc的CPU经常会拉到100%

我在日志中发现一些问题,往往是在compact 完成后延迟就会恢复正常

只不过现在compact时间比较长了,有参数可以调节这个吗

参考回帖中手动和自动 compaction 加速的描述部分 ~

整理下问题以及当前排查的信息:

首先,skipped_delete_index 产生的原因如下:

	--> delete/update 操作后,key mvcc 版本增加 
	--> GC 过后标记为 tombstone key,并且随着 GC 的运行,在未 compaction 前,该值会累积增加
	--> coprocessor 查询在扫描数据时会扫描 tombstone key 在监控中表现为 skipped_delete_index 数量增加 
	--> tombstone key 在 RocksDB 自动触发的 compaction 后消除
	--> sql 扫描到的 total key 和 process key 基本持平

在了解上述背景的前提下,建议你那里看下下述的信息:

  1. 在业务高峰期早 8 点 ~ 晚 10 点,update 操作 3200+ 的 qps 会不断的累积 key 的 mvcc 版本,再加上每 10 分钟会进行一次 gc,积累了数量相对多的 tombstone 版本信息,表现在监控中是 skipped_delete_index 不断的升高

  2. 可以通过查看问题发生期间的 slowlog,确认当时 sql 的 total key 和 process key 的情况,以及目标 sql 使用的 index name → 当前无法确认,因为相关日志么有保留

  3. 问题发生期间对比下 store1 和非 store1 的节点,tikv-details 监控项的差异,尤其是 compaction 相关的监控项,可以参考上面的改表达式的方式 by instance 看下各个 tikv 实例的情况

其次,skipped_delete_index 只大量集中在 store1 节点上

可能的原因是集群中的 update 或 delete 操作比较集中在 store1,造成 store1 上残留的 key 的版本过多,可以下面两个方面再次确认下:

  1. 写热点 → pd-ctl 无法查看问题发生期间的历史信息,且版本为 v3.0.11,没有流量可视化工具

  2. 和研发端确认下业务行为,比如 sql 在进行 update 操作时,具体的表现是什么?比如 2 列或者 3 列索引,只有 1 列或者 2 列 update 非常频繁

下次如果再次出现类似的问题

  1. 保留相关的日志信息,如 slowlog,关注下慢 sql 的 total 和 process key 的情况,见官方文档:
    https://docs.pingcap.com/zh/tidb/v3.0/identify-slow-queries#字段含义说明

  2. v3 版本,因 tombstone key 过多造成 sql 访问过慢,那么可以评估

  1. 升级集群版本,当前 v3.0.11 版本过老,在 v4 版本以及 v5 版本,易用性,稳定性新增了非常多的 feature,并且在其他社区用户的生产环境得到了积极的反馈。其中,v5 版本新增的 GC in Compaction Filter 特性来避免清理掉的旧版本残留大量删除标记影响顺序扫描性能,具体可以搜索官方文档.并且类似问题,仍然在持续优化:
    Handle gc on all levels by hicqu · Pull Request #10573 · tikv/tikv · GitHub

感谢~
如果我调整rockdb的参数,是不是要滚动升级才能生效

3.0.11 TiKV 的参数修改都是需要滚动升级的。4.0 开始支持在线修改一些配置,可以参考一下:
https://docs.pingcap.com/zh/tidb/stable/dynamic-config#在线修改集群配置

1 个赞

好的 谢谢~

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