tidb 取事务 Start Ts 耗时比较高

【 TiDB 使用环境】生产环境
【 TiDB 版本】 5.3.3
tidb监控显示获取tso 时间长

慢查询里面确实显示是获取tso时间长:


机器配置是64c512G,磁盘是nvme的

获取 startTS 是 tidb-server 去访问 PD Leader 拿到的 TSO,这块时间比较久,就需要排查这条链路的相关监控情况。

可以分下面几个方向进行排查和确认:

  • 检查 tidb-server 到 pd leader 的网络延迟、网络抖动情况
  • 检查 pd 集群,尤其 pd leader 是否繁忙,重点排查其 CPU 等使用情况
  • 检查 GRPC 调用时延,确认网络请求调用是否正常
1 个赞

1.持续ping了一会,网络时延和网络抖动应该都没有。
2.pd leader 的cpu使用率很低,pd使用的是64核的物理机,nvme的磁盘。
3. 这块看起来pd是没有问题;但是pd client 的cmd duration操作确实很慢。


4.这是tidb节点的cpu使用率,64核使用率也很低。

切下pd leader试试

日志呢,确认一下 tidb.log 和 pd.log 有无异常日志

日志检查也没有什么发现。

查看PD的负载情况,还有网络状况

单纯看这张图,可能出在tidb server侧,着重检查下,各种监控、日志,看看有什么异常

tidb server上 报错信息如下:
[terror.go:307] [“encountered error”] [error=“Unknown charset id 0”] [stack=“github.com/pingcap/tidb/parser/terror.Log\n\t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/parser/terror/terror.go:307\ngithub.com/pingcap/tidb/server.(*Server).onConn\n\t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/server/server.go:520”]

tidb-server的所有日志:
[conn.go:1065] [“read packet failed, close this connection”] [conn=22107731] [error=“[server:8052]invalid sequence 31 != 0”]
[conn.go:724] [“failed to check the user authplugin”] [conn=22107735] [error=“Unknown charset id 0”]

pd的负载很低:

pd的性能问题吧

看监控感觉像是tidb-server的问题;但是是什么问题,还看不出来。
不知道服务器的numa没有关闭会不会导致这个问题?

tidb-server的内存使用率貌似在缓慢增长,但是也不是很明显

  1. 是混布的吗?
  2. 监控截图看对应的有问题的时间段的监控,我看你截图什么时间段的都有
  3. 日志也要看对应节点对应时间段的问题
  4. 是3个tidb server是没有负载均衡么,我看所有的链接都是在两个节点上,另一个节点上一个连接都没有
  5. 感觉这块也有点问题,request居然比cmd还高

另外,start tso wait duration的监控图能发下么?

1、是混部了另外一个 tidb节点,但是这个混部的几乎没有访问;我下午准备把这个集群的节点拆到其他机器上看看。

目前用新的机器tidb-server拆出去后,获取tso到10毫秒以内了,不过还得再观察。

切完tidb-server后,虽然获取tso延迟是降下来不少。但是感觉还是有点不正常,还是有点高;其他集群都是99线3ms左右,90线450us左右。这个有点偏高,再观察下吧。

也看一下业务运行的情况

tidb节点重新拆分后,运行一个周后,获取tso时间又慢慢变长了。目前获取tso 999线变为100毫秒左右,99线变为20-30毫秒左右了。

偶尔的抖动问题不大,就是这种tso 99线增长的20毫秒有点高了。

事务执行时间也慢慢变长。