OceanBaseデータベースのフルリンクトレース機能は、クライアントからOBProxy、さらにOBServerまでのフルリンクの各段階での所要時間および各コンポーネント診断に関連するTrace情報を記録できます。ここで、Trace Logが記録する最小単位はSpanであり、各Spanは特定の実行区間またはモジュールが開始から終了までの時間と関連情報(Tagsを使用)を記録できます。これにより、運用スタッフはデータベース内部の処理ロジックを理解し、問題の所在を特定するのに役立ちます。
SpanおよびTagの定義
SpanとTagの定義は、ob_trace_def.hファイルに記述されており、HIGH(レベル1)、MIDDLE(レベル2)、LOW(レベル3)の3つのレベルに分かれています。そのうちHIGHがデフォルトの設定レベルであり、デフォルトではレベル1に対応するSpanとTagが出力されます。他のレベルのSpanとTagを出力する必要がある場合は、コントロールコマンドを使用してTrace Level値を引き上げる必要があります。レベル2のSpanは、ユーザーが問題を分析する際により多くのSpan情報を得るために使用され、レベル3のSpanは主にOceanBaseデータベースの開発者が診断時により詳細な情報を得るために使用されます。設定したLevel値がNの場合、TraceはLevel <= NのSpanとTagを出力します。
Spanの定義は以下のとおりです:
#define HIGH_LEVEL_SPAN
DEF_SPAN(span_type, comment)
#undef HIGH_LEVEL_SPAN
#define MIDDLE_LEVEL_SPAN
DEF_SPAN(span_type, comment)
#undef MIDDLE_LEVEL_SPAN
#define LOW_LEVEL_SPAN
DEF_SPAN(span_type, comment)
#undef LOW_LEVEL_SPAN
Tagの定義は以下のとおりです:
#define HIGH_LEVEL_TAG
DEF_SPAN(tag_type, comment)
#undef HIGH_LEVEL_TAG
#define MIDDLE_LEVEL_TAG
DEF_SPAN(tag_type, comment)
#undef MIDDLE_LEVEL_TAG
#define LOW_LEVEL_TAG
DEF_SPAN(tag_type, comment)
#undef LOW_LEVEL_TAG
関連するSpanの紹介は以下のとおりです:
com_query_entry:クエリ処理。mpquery_single_stmt:単一ステートメントのアクセスパス。sql_compile:SQLのコンパイル。pc_get_plan:実行計画の取得。hard_parse:ハードパース。parse:ソフトパース。resolve:構文ツリーの意味を解析し、ステートメントを生成する。rewrite:SQLの書き換え。optimize:コストベースの最適化を行い、実行計画ログを生成する。code_generate:実行計画ログに基づいて物理実行計画を生成する。pc_add_plan:生成された実行計画をPlan Cacheに追加する。sql_execute:物理実行計画を実行する。open:実行計画を開く。response_result:実行計画のプロセスと結果。px_schedule:PXに基づいてタスクをスケジューリングする。px_task:PXサブタスクを実行する。close:実行計画を閉じる。cmd_execute:コマンドを実行する。cmd_open:追跡セッションを開始するためのコントロールコマンド。ps_prepare:Preprocess Statementのプリペア。ps_execute:Preprocess Statementの実行。ps_close:Preprocess Statementを閉じる。pl_entry:ストアドプロシージャの処理。pl_compile:ストアドプロシージャオブジェクトのコンパイル。pc_get_pl_object:Plan Cacheからストアドプロシージャオブジェクトを取得する。pc_add_pl_object:ストアドプロシージャオブジェクトをPlan Cacheに保存する。pl_execute:ストアドプロシージャを実行する。pl_spi_query:ストアドプロシージャ内のSPIステートメントを実行する。pl_spi_prepare:ストアドプロシージャのプリペア段階。pl_spi_execute:ストアドプロシージャ内のSPIステートメントを実行する。inner_prepare:内部SQLのプリペア段階。inner_execute:内部SQLの実行段階。inner_execute_read:内部SQLの読み取り。inner_execute_write:内部SQLの書き込み。inner_commit:内部SQLトランザクションのコミット。inner_rollback:内部SQLトランザクションのロールバック。
関連するTagの紹介は以下のとおりです:
com_query_entrylog_trace_id:現在のリクエストのLog内のTrace ID。err_code:現在のリクエストのエラーコード。
sql_compilesess_id:Session ID。sql_text:SQLテキスト。sql_id:SQL ID。hit_plan:実行計画が実行計画キャッシュにヒットしたことを示す。
px_tasktask_id:パラレルタスクの論理ID。dfo_id:データストリーム操作ID。sqc_id:サブクエリコーディネータID。qc_id:クエリコーディネータID。group_id:リソースグループID。
px_scheduledfo_id:データストリーム操作ID。used_worker_cnt:使用中のpxワーカースレッド数。qc_id:クエリコーディネータID。
ps_closeps_id:Preprocess Statement ID。
Trace Logの例
運用担当者は、必要に応じてPL/SQLパッケージDBMS_MONITOR内の関連メソッドを使用して、特定のアプリケーションにおける異なる識別情報の次元でのフルトレースTraceを有効にするかどうか、またそのTraceの計測と関連情報をTraceログに出力するポリシーを制御できます。ログの出力は、サンプリング頻度に基づいてサンプリングされ、メモリに記録されるかどうかが決定され、一定の確率でTraceログに出力されます。詳細については、フルトレースを参照してください。 例:
+-------------------------------------------+----------------------------+------------+
| Operation | StartTime | ElapseTime |
+-------------------------------------------+----------------------------+------------+
| com_query_process | 2023-03-22 14:30:27.552259 | 0.405 ms |
| └── mpquery_single_stmt | 2023-03-22 14:30:27.552266 | 0.386 ms |
| ├── sql_compile | 2023-03-22 14:30:27.552283 | 0.083 ms |
| │ └── pc_get_plan | 2023-03-22 14:30:27.552286 | 0.025 ms |
| └── sql_execute | 2023-03-22 14:30:27.552379 | 0.242 ms |
| ├── open | 2023-03-22 14:30:27.552380 | 0.024 ms |
| ├── response_result | 2023-03-22 14:30:27.552417 | 0.140 ms |
| │ ├── get_das_id | 2023-03-22 14:30:27.552421 | 0.000 ms |
| │ └── do_local_das_task | 2023-03-22 14:30:27.552435 | 0.049 ms |
| └── close | 2023-03-22 14:30:27.552570 | 0.039 ms |
| ├── close_das_task | 2023-03-22 14:30:27.552571 | 0.012 ms |
| └── end_transaction | 2023-03-22 14:30:27.552596 | 0.003 ms |
+-------------------------------------------+----------------------------+------------+
12 rows in set (0.006 sec)