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 秒であり、残りがその子ノードによって消費された時間であることを表します。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 つのテーブルでcop
join
クエリを実行するexecute
期間は 60 秒で、その間に結合した 2 つのテーブルでテーブル スキャン リクエストが同時に実行されます。10 リクエストの実行期間がそれぞれ 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 がキー値要求を送信する合計時間は 14745.07 秒で、そのうちGet
およびCop
タイプのキー値要求にはそれぞれ 9798.02 秒と 4946.46 秒かかります。