tidb层 PD TSO Wait Duration 999指标达到了 20 ms级别

TiDB 侧拿到一个 TS 后(TSFuture),调用其 Wait 方法获取 TSO 的等待时长,即“调用 tsFuture.Wait() 到获取到 TSO 结果的时长“。

当 TiDB 请求生成 TSO 时,PD Client 不会 block 调用者,而是直接返回一个 TSFuture,并在后台异步处理 TSO 请求的收发,一旦完成立即返回给 TSFuture,TSFuture 的持有者则需要调用 Wait 来获得最终的 TSO 结果。此时分为两个情况:

  • 如果 TSO 请求已经完成,Wait 会立刻返回一个可用的 TSO 或 error
  • 如果 TSO 请求还未完成,Wait 会 block 住等待一个可用的 TSO 或 error(说明 gRPC 请求在途,网络延迟较高)

而 PD TSO Wait Duration 就代表了从调用 Wait 方法到获得 TSO 的总等待时长(不包括 error 的情况),其可能包括了以下耗时(注意这个“可能”,具体会因调用 Wait 的时机不同而变化):

  • TiDB 侧 Go Runtime 调度耗时(大多数情况)–tidb cpu
  • 部分 gRPC 网络时延
  • 部分 PD 侧 TSO 生成处理耗时
  • 部分 PD 侧 Go Runtime 调度耗时
1 个赞