📣
TiDB Cloud Premium はパブリックプレビュー中です。エンタープライズワークロード向けの無制限のスケーリング、即時の弾力性、高度なセキュリティを提供します。このページは自動翻訳されたものです。原文はこちらからご覧ください。

スロークエリのトリガールールを設定する



TiDB Cloud コンソール では、Diagnosis ページの Slow Query タブでスロークエリを確認できます。

デフォルトでは、300 ミリ秒を超える SQL クエリはスロークエリと見なされます。スロークエリのトリガールールを設定するには、tidb_slow_log_rules システム変数を変更します。

tidb_slow_log_rules は、多次元メトリクスの組み合わせをサポートします。これは、スロークエリの「対象を絞ったサンプリング」や「問題の再現」に適しており、特定のメトリクスの組み合わせに基づいて対象のステートメントをフィルタリングできます。

例

  • 標準形式(SESSION スコープ):

    SET SESSION tidb_slow_log_rules = 'Query_time: 0.5, Is_internal: false';
  • 無効な SESSION ルール(SESSION スコープは Conn_ID をサポートしません):

    SET SESSION tidb_slow_log_rules = 'Conn_ID: 12, Query_time: 0.5, Is_internal: false';

統一されたルール構文と型制約

  • ルール数の上限と区切り: サポートされる各スコープには最大 10 個のルールを含めることができます。ルールは ; で区切ります。
  • 条件形式: 各条件は field_name:value 形式を使用します。1 つのルール内の複数条件は , で区切ります。
  • フィールド名は大文字と小文字を区別しません。フィールド名内のアンダースコアやその他の文字はそのまま保持されます。

TiDB Cloud Essential と TiDB Cloud Premium は、tidb_slow_log_rules に対して SESSION ルールのみをサポートします。したがって、GLOBAL ルールでのみ使用可能な Conn_ID はサポートされません。

  • マッチングの意味:
    • Conn_ID を除く数値フィールドは >= でマッチします。Conn_ID、文字列フィールド、ブールフィールドは等価比較(=)でマッチします。
    • DB と Resource_group のマッチングでは大文字と小文字を区別しません。
    • >、<、!= などの明示的な演算子はサポートされません。

型制約は次のとおりです。

  • 数値型(int64、uint64、float64)では、値は 0 以上である必要があります。負の値はパースエラーになります。
    • int64: 最大値は 2^63-1 です。
    • uint64: 最大値は 2^64-1 です。
    • float64: 値は有限かつ非負である必要があります。最大値はおよそ 1.79e308 です。NaN や Inf、-Inf などの無限値は無効であり、エラーになります。
  • bool: true/false、1/0、t/f をサポートします(大文字と小文字は区別しません)。
  • string: 現時点では、引用符(シングルまたはダブル)で囲んだ場合でも、区切り文字 ,(条件区切り)または ;(ルール区切り)を含む文字列はサポートされません。エスケープはサポートされません。
  • 重複フィールド: 同じフィールドが 1 つのルール内で複数回指定された場合、最後に出現したものが有効になります。

サポートされるフィールド

以下の表のフィールドは、特に明記がない限り、統一されたルール構文と型制約 で説明した一般的なマッチングルールと型ルールに従います。

フィールド名型単位説明
Conn_IDuintcount接続 ID(セッション ID)です。このフィールドは完全一致でマッチします。たとえば、Conn_ID:3 はセッション ID が 3 のログにのみマッチします。このフィールドは GLOBAL ルールでのみサポートされます。
Session_aliasstringnone現在のセッションのエイリアスです。
DBstringnone現在のデータベースです。マッチングでは大文字と小文字を区別しません。
Exec_retry_countuintcountこのステートメントのリトライ回数です。このフィールドは通常、ロック取得に失敗したときにステートメントが再試行される悲観的トランザクション向けです。
Query_timefloatsecondステートメントの実行時間です。
Parse_timefloatsecondステートメントのパース時間です。
Compile_timefloatsecondクエリ最適化にかかった時間です。
Rewrite_timefloatsecondこのステートメントのクエリ書き換えに消費された時間です。
Optimize_timefloatsecond実行計画の最適化に消費された時間です。
Wait_TSfloatsecondトランザクションのタイムスタンプ取得を待機した時間です。
Is_internalboolnoneSQL ステートメントが TiDB 内部のものかどうかを示します。true はステートメントが TiDB 内部で実行されたことを示し、false はユーザーによって実行されたことを示します。
DigeststringnoneSQL ステートメントのフィンガープリントです。
Plan_digeststringnone実行計画の digest です。
Num_cop_tasksintcountこのステートメントによって送信されたコプロセッサータスクの数です。
Mem_maxintbytesSQL ステートメントの実行期間中に使用された最大メモリ空間です。
Disk_maxintbytesSQL ステートメントの実行期間中に使用された最大ディスク空間です。
Write_sql_response_totalfloatsecondこのステートメントが結果をクライアントへ返送するのに消費した時間です。
Succboolnoneステートメントが正常に実行されたかどうかを示します。
Resource_groupstringnoneステートメントがバインドされているリソースグループです。マッチングでは大文字と小文字を区別しません。
KV_totalfloatsecondこのステートメントによる TiKV または TiFlash へのすべての RPC リクエストに費やされた時間です。
PD_totalfloatsecondこのステートメントによる PD へのすべての RPC リクエストに費やされた時間です。
Process_timefloatsecondTiKV における SQL ステートメントの合計処理時間です。データは TiKV に並行して送信されるため、この値は Query_time を超える場合があります。
Backoff_timefloatsecondステートメントがリトライを必要とするエラーに遭遇した際、再試行前に待機した時間です。一般的なエラーには、ロック競合、リージョン分割、TiKV サーバーのビジー状態などがあります。
Total_keysuintcountコプロセッサーがスキャンしたキー数です。
Process_keysuintcountコプロセッサーが処理したキー数です。Total_keys と比べて、Process_keys には MVCC の古いバージョンは含まれません。Process_keys と Total_keys の差が大きい場合、多数の古いバージョンが存在することを示します。
cop_mvcc_read_amplificationfloatratioMVCC 読み取り増幅率で、Total_keys / Process_keys として計算されます。
Prewrite_timefloatsecond2 フェーズトランザクションコミットの第 1 フェーズ(prewrite)の継続時間です。
Commit_timefloatsecond2 フェーズトランザクションコミットの第 2 フェーズ(commit)の継続時間です。
Write_keysuintcountトランザクションが TiKV の Write CF に書き込むキー数です。
Write_sizeuintbytesトランザクションのコミット時に書き込まれるキーまたは値の合計サイズです。
Prewrite_regionuintcount2 フェーズトランザクションコミットの第 1 フェーズ(prewrite)に関与する TiKV リージョン数です。各リージョンは 1 回のリモートプロシージャコールを発生させます。

有効時の動作とマッチ順序

  • tidb_slow_log_rules を設定すると、新しいルールが追加されるのではなく、指定したスコープ内の既存ルールが上書きされます。
  • tidb_slow_log_rules に空文字列を設定すると、指定したスコープ内のルールがクリアされます。
  • 複数ルールは OR で結合され、1 つのルール内の複数フィールド条件は AND で結合されます。
  • SQL 実行時間を引き続きスロークエリログ出力の条件として使用したい場合は、ルール内で Query_time を使用し、単位が秒であることに注意してください。

TiDB Cloud Essential と TiDB Cloud Premium は、tidb_slow_log_rules に対して SESSION ルールのみをサポートします。

  • 現在のセッションに SESSION ルールが 1 つでもある場合、スロークエリログの出力はルールのマッチ結果によって決まります。
  • SHOW VARIABLES LIKE 'tidb_slow_log_rules' と SELECT @@SESSION.tidb_slow_log_rules は SESSION ルールのテキストを返します。未設定の場合は空文字列を返します。

推奨事項

  • tidb_slow_log_rules は、単一しきい値方式を置き換えるために設計されています。多次元メトリクス条件の組み合わせをサポートし、スロークエリログ出力をより柔軟かつきめ細かく制御できます。

  • 1 台の TiDB ノード(16 CPU コア、48 GiB メモリ)と 3 台の TiKV ノード(各 16 CPU コア、48 GiB メモリ)を備えた十分なリソースのあるテスト環境において、sysbench テストを繰り返した結果、多次元のスロークエリログルールによって 30 分以内に数百万件のスローログエントリが生成される場合でも、パフォーマンスへの影響は小さいことが示されています。ただし、ログ量が数千万件に達すると、TPS は大幅に低下し、レイテンシーも顕著に増加します。したがって、業務ワークロードが高い場合や CPU とメモリリソースが限界に近い場合は、過度に広いルールによるログの氾濫を避けるため、tidb_slow_log_rules を慎重に設定してください。

このページは役に立ちましたか?