Cause: java.sql.SQLException: Information schema is out of date: schema failed to update in 1 lease, please make sure TiDB can connect to TiKV

【 TiDB 使用环境`】
生产环境 cpu 64核,256G内存,nvme磁盘,万兆网络,一个机器上面两个TIKV实例
【 TiDB 版本】
v5.4.0
【遇到的问题】
Information schema is out of date: schema failed to update in 1 lease, please make sure TiDB can connect to TiKV
1.19:30左右系统整体QPS都下降,SQL出现tikvrpc,region miss,业务端报上面的错误,那个时间leader drop 很高,如何避免
2.通过查询得知是tikv压力过大导致,但是tikv的cpu 使用率54%,IO使用率40%左右,业务端想保持当前传输速度,tidb如何调整哪些参数,能不报错,不影响业务

【复现路径】
一个业务表160个并发,插入2000W数据,表主键自增
【问题现象及影响】
1.影响整体稳定性,出现问题的时候,整个系统响应时间都变长

【附件】







请提供各个组件的 version 信息,如 cdc/tikv,可通过执行 cdc version/tikv-server --version 获取。

建议插入的业务分批执行,批不要太大。

tikv的压力也不是很大,为啥获取不到Information schema信息呢?哪个线程用来获取这个信息?能不能增大这个线程的大小?还有那个时间leader drop 很高,如何避免

根因分析:

  1. leader drop 很高,说明 raftstore 统计到该 store 的 leader 数量在变化,变化可能是 “主键自增导致的连续热点写入” 导致的,也可能是因 tikv 过忙导致心跳出现问题等等。
  2. region miss 相关错误,说明在 tidb 根据 Region Cache 中缓存的旧 region leader 所在 store 位置去请求,发现 Leader 已经不在。但从给出的面板上看,没看到 Region Miss 很高的情况,Region Miss 的 SQL 会自动重试。
  3. cpu 使用率54%,IO使用率40% 确实不算高,但可以看到 leader drop 时间点 raftstore cpu 及 async apply 几乎掉底,但负载点前后 raft store cpu 和 async apply cpu 的压力在没调参的情况下,应该已逼近极限。证明当前 tikv 存在压力

解决方法(猜测):

  1. 可以看看 dashboard 这个表有没有写入热点,有的话,表主键自增能不能改? 比如做 shard 之类的方法避开热点。
  2. raftstore store pool sizeasync apply pool size 默认都是 2 个 vCore,出问题前后近乎打满,可以先把这两个线程池调大。

因为面板有限,从目前信息感觉 2 点 pool 打满的根因占比更大,从 leader 仅有一个 store 特别高看,感觉是连续自增主键导致的写入热点。如果上述信息尝试后无果,可以采集一份 clinic,要不一点点要面板太麻烦了。

另外,“哪个线程用来获取这个信息?能不能增大这个”
–> tidb 获取信息的线程足够用,如 maotiancai 所说的那样,现在的问题是 tikv 有压力(不能简单只从 system cpu iousage 看),tidb 再加线程也没用。

估计是大量的插入导致region分裂,然后客户端缓存的region信息失效。
tikv压力较大,心跳消息太多,导致超时,进一步批量的region超时,都开始选举,消息就更多了。tidb一定时间内读取不到schema信息。具体你的集群多少region也看不出来。
可以调整下region的心跳频率:https://docs.pingcap.com/zh/tidb/v5.4/tikv-configuration-file#hibernate-regions

pd-heartbeat-tick-interval

也可以调整下region分裂的参数:
split-region-check-tick-interval

  • 检查 region 是否需要分裂的时间间隔,0 表示不启用。
  • 默认值:10s
  • 最小值:0

最根本的还是要增加tikv的资源。

该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。