TiDB ダッシュボード メトリクス関係グラフ

TiDB ダッシュボード メトリック関係グラフは、v4.0.7 で導入された機能です。この機能は、TiDB クラスター内の各内部プロセスの期間の監視データの関係グラフを表示します。目的は、各プロセスの所要時間とそれらの関係をすばやく理解できるようにすることです。

アクセスグラフ

TiDB ダッシュボードにログインし、左側のナビゲーション メニューで [ クラスタ Diagnostics ] をクリックすると、メトリック関係グラフを生成するページが表示されます。

Metrics relation graph homepage

Range Start TimeRange Durationを設定した後、 Generate Metrics Relationボタンをクリックすると、Metrics Relationship Graph のページに入ります。

グラフを理解する

次の図は、メトリック関係グラフの例です。このグラフは、2020-07-29 16:36:00 から 5 分以内の TiDB クラスターでの合計クエリ時間に対する各モニタリング メトリックの時間の割合を示しています。グラフには、各監視メトリックの関係も示されています。

Metrics relation graph example

たとえば、 tidb_executeモニタリング メトリックのノードの意味は次のとおりです。

  • tidb_executeのモニタリング メトリックの合計期間は 19306.46 秒で、これは合計クエリ期間の 89.4% を占めます。
  • tidb_executeノード自体の所要時間は 9070.18 秒で、これはクエリの合計所要時間の 42% を占めています。
  • ボックス領域の上にマウスを置くと、合計期間、平均期間、平均 P99 (99 パーセンタイル) 期間など、メトリックの詳細情報が表示されます。

tidb_execute node example

ノード情報

各ボックス領域はモニタリング メトリックを表し、次の情報を提供します。

  • モニタリング指標の名前
  • モニタリング指標の合計期間
  • クエリの合計時間に対するメトリクスの合計時間の割合

メトリック ノードの合計期間=メトリック ノード自体の期間 + その子ノードの期間。したがって、一部のノードのメトリック グラフは、ノード自体の期間の合計期間に対する割合を表示します ( tidb_executeのグラフなど)。

tidb_execute node example1

  • 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のメトリック ノードの詳細が表示されます。

tidb_execute node example2

上の画像に表示されているテキスト情報は、合計期間、合計時間、平均期間、および平均期間 P99、P90、および P80 を含むメトリック ノードの説明です。

ノード間の親子関係

tidb_executeメトリック ノードを例として、このセクションではメトリックの子ノードを紹介します。

tidb_execute node relation example1

上のグラフから、 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 つのテーブルに対してテーブル スキャン リクエストが同時に実行されます。 copリクエストの実行時間がそれぞれ 40 秒と 30 秒の場合、 copリクエストの合計所要時間は 70 秒です。ただし、 executeの持続時間はわずか 60 秒です。したがって、親ノードの期間に子ノードの期間が完全に含まれていない場合は、点線の矢印を使用して子ノードを指します。

ノート:

ノードに子ノードを指す点線の矢印がある場合、このノード自体の持続時間は不正確です。たとえば、 tidb_executeノードでは、ノード自体の期間は 9070.18 秒 ( 9070.18 = 19306.46 - 300.66 - 9935.62 ) です。この式では、 tidb_cop子ノードの期間はtidb_executeの子ノードの期間に計算されません。しかし、実際にはそうではありません。 9070.18 秒というtidb_execute自体のデュレーションには、 tidb_copのデュレーションの一部が含まれており、この部分のデュレーションは特定できません。

tidb_kv_requestとその親ノード

tidb_execute node relation example2

tidb_kv_requestの親ノードであるtidb_coptidb_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.Gettidb_kv_request.Copのノードは含まれませんが、後者の 2 つのノードで構成されます。子ノードの名前プレフィックスは、親ノードの名前に.xxxを加えたものです。これは、子ノードが親ノードのサブクラスであることを意味します。この場合は、次のように理解できます。

TiDB がキー値リクエストを送信する合計時間は 14745.07 秒で、その間にGetCopのタイプのキー値リクエストはそれぞれ 9798.02 秒と 4946.46 秒を消費します。