SQLトレース(SHOW TRACE)は、OceanBaseデータベースが提供するパフォーマンス分析ツールであり、直近に実行されたSQLリクエストの実行過程における呼び出しチェーンや、各段階での時間消費状況をインタラクティブに提供します。これにより、パフォーマンス分析やチューニングを行うことが可能になります。
SQLトレースの役割
パフォーマンスチューニングのニーズ
- 複雑なクエリの最適化:SQL実行が遅い場合、トレースを通じて問題(例えば、フルテーブルスキャン、
JOINの順序が不適切など)を迅速に特定できます。 - リソース競合分析:ロック待機や並行競合など、遅延を引き起こす問題を特定します。
- インデックスの有効性検証:クエリがインデックスにヒットしているか、または冗長インデックスが存在するかどうかを判断します。
問題診断シナリオ
- スロークエリの特定:
ELAPSE_TIMEを使用して、時間消費量が最も長いサブタスクを特定します。 - インデックスの欠損:
inner_execute_readの時間消費量が異常に高い場合、インデックスが使用されていない可能性があります。 - 分散タスクの異常:
do_local_das_taskの時間消費量が均等になっているかどうかを確認し、単一ポイントのパフォーマンスボトルネックを回避します。
システム安定性の保証
- 予防保守:重要なSQLを定期的にトレースすることで、潜在的なパフォーマンスリスクを早期に発見します。
- 故障の復旧:本番環境で異常が発生した場合、Traceログを組み合わせて問題を迅速に再現します。
SQLトレースの使用
SHOW TRACE機能はデフォルトで無効になっており、Session変数ob_enable_show_traceを使用して有効または無効にすることができます。
操作手順
ステップ1:現在のセッションのSQLトレース機能を有効にする
例:
SET ob_enable_show_trace = 1;
ステップ2:ターゲットSQLを実行する
例:
テーブル
t1を作成します。CREATE TABLE t1(c1 INT, c2 INT, c3 INT);テーブルにデータを挿入します。
INSERT INTO t1 VALUES(1,1,1),(2,2,2);テーブル
t1のデータベースを確認します。SELECT/*+PARALLEL(2)*/ COUNT(*) FROM t1;実行結果は次のとおりです:
+----------+ | COUNT(*) | +----------+ | 2 | +----------+ 1 row in set
ステップ3:Trace情報を確認する
SHOW TRACE; ステートメントを使用して、前回のSQLのトレース結果を表示します。
例:
SHOW TRACE;
実行結果は次のとおりです:
+-------------------------------------------------------+---------------------+-------------+
| OPERATION | START_TIME | ELAPSE_TIME |
+-------------------------------------------------------+---------------------+-------------+
| com_query_process | 2023/03/07 16:27:43 | 5241 µs |
| └── mpquery_single_stmt | 2023/03/07 16:27:43 | 5208 µs |
| ├── sql_compile | 2023/03/07 16:27:43 | 4149 µs |
| │ ├── pc_get_plan | 2023/03/07 16:27:43 | 108 µs |
| │ └── hard_parse | 2023/03/07 16:27:43 | 3952 µs |
| │ ├── parse | 2023/03/07 16:27:43 | 97 µs |
| │ ├── resolve | 2023/03/07 16:27:43 | 492 µs |
| │ ├── rewrite | 2023/03/07 16:27:43 | 598 µs |
| │ ├── optimize | 2023/03/07 16:27:43 | 2022 µs |
| │ │ ├── inner_execute_read | 2023/03/07 16:27:43 | 485 µs |
| │ │ │ ├── sql_compile | 2023/03/07 16:27:43 | 140 µs |
| │ │ │ │ └── pc_get_plan | 2023/03/07 16:27:43 | 81 µs |
| │ │ │ ├── open | 2023/03/07 16:27:43 | 43 µs |
| │ │ │ ├── get_das_id | 2023/03/07 16:27:43 | 17 µs |
| │ │ │ └── do_local_das_task | 2023/03/07 16:27:43 | 107 µs |
| │ │ └── close | 2023/03/07 16:27:43 | 66 µs |
| │ │ ├── close_das_task | 2023/03/07 16:27:43 | 17 µs |
| │ │ └── end_transaction | 2023/03/07 16:27:43 | 6 µs |
| │ ├── code_generate | 2023/03/07 16:27:43 | 197 µs |
| │ └── pc_add_plan | 2023/03/07 16:27:43 | 74 µs |
| └── sql_execute | 2023/03/07 16:27:43 | 979 µs |
| ├── open | 2023/03/07 16:27:43 | 19 µs |
| ├── response_result | 2023/03/07 16:27:43 | 768 µs |
| │ ├── get_das_id | 2023/03/07 16:27:43 | 0 µs |
| │ └── do_local_das_task | 2023/03/07 16:27:43 | 358 µs |
| └── close | 2023/03/07 16:27:43 | 145 µs |
| └── close_das_task | 2023/03/07 16:27:43 | 19 µs |
+-------------------------------------------------------+---------------------+-------------+
27 rows in set
重要なフィールドの説明:
| フィールド | 意味 |
|---|---|
| OPERATION | SQL実行の具体的な段階(例:parse、optimize、do_local_das_task)。 |
| START_TIME | その段階の開始時間(タイムライン分析に使用)。 |
| ELAPSE_TIME | その段階で消費した時間(単位:マイクロ秒µs)。パフォーマンスボトルネックの特定に使用されます。 |
関連ドキュメント
- SQLチューニングの詳細については、SQLチューニングの概要を参照してください。
- Show Traceログの使用を設定する方法の詳細については、ob_enable_show_traceを参照してください。