tidb sql执行计划

+1, 跟 join 关系不大,主要问题在 rpc_time 上;

  1. rpc_time 表示 “向 TiKV 发送 Cop 类型的 RPC 请求总时间”, 在 tikv-client go 中记录 runtime 信息合并而来;
  2. rpc_num 表示 “同上 RPC 请求个数”;
  3. rocksdb: {delete_skip_count …} : 源自 protobuf,是 tikv 传过来的 → 详见定义
  4. tikv_task: {time …} 也是 tikv 传过来的,–> 详见定义
  5. 这个问题又只有 1 个 rpc_num,说明同样是一个请求,在 tikv 执行 task 的时候时快时慢;

一般这种问题有 2 种可能:

  1. 时间耗在 网络抖动上
  2. 属于长尾情况,大部分请求都在 ms 级,时不时蹦到 s 级,s 级的比例并不高,不改监控看不出来(p99,p999),但是从 rocksdb 相关信息看 tikv 回传信息对应点位 不太可能慢在 tikv 处理流程。 也就是说,慢在 grpc request end + network + grpc response end。 要么是 rust grpc 慢了(概率低),要么是 tikv grpc goroutine 慢了(概率低),要么是网络抖了。

感觉这种情况应该占比 该 SQL 总执行次数比重不大吧?

  1. 网络抖 看 ping latency
  2. 如果要细查 grpc request end 和 grpc response end 执行情况,tikv 测可以看看 tikv-details → grpc 下面的面板,可能还要改下 分位数曲线,想看极端情况,把 99 线改 1 看极端情况。
  3. 如果能稳定复现的话,最好 trace 一下,这个同时观察 这 1 个 region 的 request 发给哪个 tikv 了,然后沿着请求链路的面板,看看是否有蛛丝马迹。