SQLトレース(SHOW TRACE)は、OceanBase データベースが提供するパフォーマンス分析ツールであり、直前に実行されたSQLリクエストの実行プロセスにおける呼び出しチェーンと、チェーン内の各段階での所要時間をインタラクティブに提供し、パフォーマンス分析やチューニングに役立ちます。
SQLトレースの役割
パフォーマンスチューニングのニーズ
- 複雑なクエリの最適化:SQLの実行が遅い場合、トレースにより問題を迅速に特定できます(例:テーブル全体のスキャン、
JOINの順序が不適切など)。 - リソース競合分析:ロック待ち、同時実行の競合など、遅延を引き起こす問題を特定します。
- インデックスの有効性検証:クエリがインデックスにヒットしているか、冗長なインデックスが存在するかを判断します。
問題診断のシナリオ
- スロークエリの特定:
ELAPSE_TIMEを使用して、最も時間を要したサブタスクを特定します。 - インデックスの欠落:
inner_execute_readの時間が異常にかかる場合、インデックスが使用されていない可能性があります。 - 分散タスクの異常:
do_local_das_taskの時間が均等にかかっているか確認し、単一点でのパフォーマンスボトルネックを回避します。
システム安定性の保証
- 予防保守:定期的に重要なSQLをトレースすることで、潜在的なパフォーマンスリスクを早期に発見します。
- 障害発生後の振り返り:本番環境で異常が発生した場合、Traceログを組み合わせて問題を迅速に再現します。
SQLトレースの使用
SHOW TRACE機能はデフォルトで無効になっています。セッション変数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を参照してください。