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

範囲開始時間と範囲期間を設定した後、 「メトリック関係の生成」をクリックすると、メトリック関係グラフのページが表示されます。
グラフを理解する
以下の画像は、メトリクス関係グラフの例です。このグラフは、2020年7月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 秒であることを示します。489.40%、19306.46 秒がすべての SQL クエリ(ユーザー SQL クエリと TiDB 内部 SQL クエリを含む)の合計実行時間の 89.40% を占めていることを示します。クエリの合計実行時間は、tidb_queryの合計実行時間です。9070.18s、tidb_executeノード自体の合計実行時間が 9070.18 秒であり、残りがその子ノードによって消費された時間であることを表します。442.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 つのテーブルに対してjoinクエリを実行するexecute番目の実行時間は 60 秒ですが、その間に結合した 2 つのテーブルに対してテーブルスキャンリクエストが同時に実行されます。10 copのリクエストの実行時間がそれぞれ 40 秒と 30 秒の場合、 copのリクエストの合計実行時間は 70 秒になります。しかし、 execute実行時間はわずか 60 秒です。したがって、親ノードの実行時間に子ノードの実行時間が完全に含まれていない場合、点線の矢印は子ノードを指します。
注記:
ノードに子ノードを指す点線矢印がある場合、そのノード自体の持続時間は不正確です。例えば、
tidb_executeのノードの場合、ノード自体の持続時間は9070.18秒(9070.18 = 19306.46 - 300.66 - 9935.62)です。この式では、tidb_cop子ノードの持続時間はtidb_execute番目の子ノードの持続時間に含まれていません。しかし、実際にはそうではありません。9番目のノード自体の持続時間である9070.18秒には、tidb_coptidb_executeノードの持続時間の一部が含まれており、この部分の持続時間は特定できません。
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 がキー値要求を送信する合計時間は 14745.07 秒で、そのうち、タイプGetとCopキー値要求にはそれぞれ 9798.02 秒と 4946.46 秒かかります。