TiDB ダッシュボードのメトリクス関係グラフ
TiDB ダッシュボード メトリクス関係グラフは、v4.0.7 で導入された機能です。この機能は、TiDB クラスター内の各内部プロセスの継続時間の監視データの関係グラフを表示します。目的は、各プロセスの期間とその関係をすぐに理解できるようにすることです。
アクセスグラフ
TiDB ダッシュボードにログインした後、左側のナビゲーション メニューで[クラスタ診断]をクリックすると、メトリック関係グラフを生成するページが表示されます。

[範囲開始時刻]と[範囲期間]を設定した後、 [メトリクス関係の生成]をクリックすると、メトリクス関係グラフのページが表示されます。
グラフを理解する
次の画像は、メトリクス関係グラフの例です。このグラフは、2020-07-29 16:36:00 以降 5 分以内の TiDB クラスター内の合計クエリ継続時間に対する各モニタリング メトリクスの継続時間の割合を示しています。グラフには、各監視メトリックの関係も示されています。

たとえば、 tidb_execute監視メトリックのノードの意味は次のとおりです。
tidb_executeモニタリング メトリックの合計期間は 19306.46 秒で、クエリ合計期間の 89.4% を占めます。tidb_executeノード自体の継続時間は 9070.18 秒で、これは合計クエリ継続時間の 42% を占めます。- ボックス領域にマウスを置くと、合計期間、平均期間、平均 P99 (99 パーセンタイル) 期間などのメトリクスの詳細情報が表示されます。
 

ノード情報
各ボックス領域は監視メトリックを表し、次の情報を提供します。
- 監視メトリックの名前
 - モニタリングメトリクスの合計期間
 - クエリの合計期間に対するメトリクスの合計期間の割合
 
メトリック ノードの合計期間=メトリック ノード自体の期間+その子ノードの期間。したがって、一部のノードのメトリック グラフには、 tidb_executeのグラフなど、合計期間に対するノード自体の期間の割合が表示されます。

tidb_executeはモニタリング メトリックの名前で、TiDB 実行エンジンでの SQL クエリの実行時間を表します。19306.46s、tidb_executeメトリックの合計期間が 19306.46 秒であることを表します。89.40%19306.46 秒が、すべての SQL クエリ (ユーザー SQL クエリと TiDB の内部 SQL クエリを含む) に費やされる合計時間の 89.40% を占めることを表します。合計クエリ期間はtidb_queryの合計期間です。9070.18s、tidb_executeノード自体の合計実行時間が 9070.18 秒であることを表し、残りはその子ノードによって消費される時間です。42.00%9070.18 秒がすべてのクエリの合計クエリ時間の 42.00% を占めることを表します。
マウスをボックス領域の上に置くと、 tidb_executeメトリック ノードの詳細が表示されます。

上の画像に表示されているテキスト情報は、合計期間、合計時間、平均期間、平均期間 P99、P90、および P80 を含むメトリック ノードの説明です。
ノード間の親子関係
tidb_executeメトリック ノードを例として、このセクションではメトリックの子ノードを紹介します。

上のグラフから、 tidb_executeの 2 つの子ノードがわかります。
pd_start_tso_wait: トランザクションのstart_tsoを待機する合計時間、つまり 300.66 秒です。tidb_txn_cmd: TiDB が関連するトランザクション コマンドを実行する合計時間 (9935.62 秒)。
さらに、 tidb_executeはtidb_copボックス領域を指す点線の矢印もあり、次のことを示しています。
tidb_executeにはtidb_copメトリックの期間が含まれますが、 copリクエストが同時に実行される可能性があります。たとえば、2 つのテーブルに対してexecute joinクエリを実行する期間は 60 秒で、その間、結合された 2 つのテーブルに対してテーブル スキャン リクエストが同時に実行されます。 copのリクエストの実行時間がそれぞれ 40 秒と 30 秒である場合、 copのリクエストの合計時間は 70 秒になります。ただし、 execute持続時間はわずか 60 秒です。したがって、親ノードの継続時間が子ノードの継続時間を完全に含んでいない場合は、点線の矢印が子ノードを指すために使用されます。
注記:
ノードにその子ノードを指す点線の矢印がある場合、このノード自体の継続時間は不正確です。たとえば、
tidb_executeノードでは、ノード自体の継続時間は 9070.18 秒 (9070.18 = 19306.46 - 300.66 - 9935.62) です。この式では、tidb_cop子ノードの継続時間は、tidb_executeの子ノードの継続時間には計算されません。しかし実際には、これは真実ではありません。tidb_executeの継続時間である 9070.18 秒には、tidb_cop継続時間の一部が含まれており、この部分の継続時間は特定できません。
tidb_kv_requestとその親ノード

tidb_kv_requestの親ノードであるtidb_copとtidb_txn_cmd.get両方ともtidb_kv_requestを指す点線の矢印があり、これは次のことを示しています。
tidb_copの持続時間にはtidb_kv_requestの持続時間の一部が含まれます。tidb_txn_cmd.getの持続時間にはtidb_kv_requestの持続時間の一部も含まれます。
ただし、 tidb_kv_requestの継続時間がtidb_copにどの程度含まれるかを判断するのは困難です。
tidb_kv_request.Get: TiDB がGet種類のキーと値のリクエストを送信する期間。tidb_kv_request.Cop: TiDB がCop種類のキーと値のリクエストを送信する期間。
tidb_kv_request子ノードとしてtidb_kv_request.Getとtidb_kv_request.Copノードを含まず、後の 2 つのノードで構成されます。子ノードの名前プレフィックスは、親ノードの名前に.xxxを加えたものになります。これは、子ノードが親ノードのサブクラスであることを意味します。このケースは次のように理解できます。
TiDB が Key-Value リクエストを送信する合計時間は 14745.07 秒で、この間、タイプGetとCopの Key-Value リクエストはそれぞれ 9798.02 秒と 4946.46 秒を消費します。