ASH レポートを生成した後、その内容を確認することで、一時的な性能問題の考えられる原因を特定できます。
ASHレポートの内容
ASHレポートのASH Reportセクションでは、システムのバージョン、OS環境、情報サンプリング期間、分析期間、ASHおよびWRデータソース、サンプル数、イベント数、平均アクティブセッション数などの統計データが記録されます。また、Top Active Tenants、Top Node Load、Top Groups、Top Foreground DB Time、Top Background DB Time、Top Sessions、Top IO Bandwidth、Top Blocking Sessions、Top Latchs、Top DB Objects、Activity Over Time、Top Execution Phase、Top IO Events、Top SQL Statement Types、Top SQL with Top Events、Top SQL with Top Operator、Top PL/SQL Procedures、Complete List of SQL Text And Statusの18つのモジュールの情報を生成します。
これらのモジュールは、主にリソース消費と実行パスのオーバーヘッドという2つの側面から、ObServerが収集したパフォーマンスデータを表示しています。そのため、具体的なパフォーマンス問題を分析する際には、関連するモジュールを確認することで、問題の原因がリソースのボトルネックであるか、実行方式が効率的でないかを特定できます。
ASHレポート
このセクションでは、ASH(Active Session History)レポートのサンプリング時間、分析時間、一般的な統計データに関する情報が表示されます。
- Cluster Name:クラスタ名。データベースクラスタの名前を示します。
- Observer Version:OceanBaseデータベースのバージョン情報。バージョン番号と詳細なビルドバージョンを含みます。
- Operation System Info:OS情報。カーネルバージョンとアーキテクチャを含みます。
- User Input Begin Time:サンプリング開始時間。セッション活動を記録を開始する時間点を示します。
- User Input End Time:サンプリング終了時間。セッション活動を記録を停止する時間点を示します。
- Analysis Begin Time:分析開始時間。サンプリングデータの分析を開始する時間点を示します。
- Analysis End Time:分析終了時間。サンプリングデータの分析を終了する時間点を示します。
- Ash Data Source:ASHデータソース。ASHを使用していない場合は、この列は表示されません。
- Wr Data Source:WRデータソース。WRを使用していない場合は、この列は表示されません。
- Elapsed Time:すべてのサンプリング時間の合計秒数。
- Ash Num of Sample:ASHサンプル数。記録されたセッション活動の回数を示します。
- Wr Num of Sample:WRサンプル数。分析時間範囲内で生成されたパフォーマンススナップショットの数を示します。
- Average Active Sessions:平均アクティブセッション数。サンプリング期間の平均アクティブセッション数を示します。
これらのデータから、サンプリング期間中のアクティビティ、セッションとイベントの数、システムのアクティブ度合いを把握できます。
ASH Report
Cluster Name: test425
Observer Version: OceanBase 4.2.5.3 (203000012025022717-866087xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
Operation System Info: Linux(3.10.0-327.ali2019.alios7.x86_64)_x86_64
User Input Begin Time: 2024-09-22 10:26:47
User Input End Time: 2025-06-22 20:27:07
Ash Analysis Begin Time: 2025-03-05 12:59:50
Ash Analysis End Time: 2025-03-05 15:47:12
Wr Analysis Begin Time: 2025-02-28 09:43:43
Wr Analysis End Time: 2025-03-05 12:59:35
Ash Data Source: oceanbase.GV$ACTIVE_SESSION_HISTORY
Wr Data Source: oceanbase.DBA_WR_ACTIVE_SESSION_HISTORY
Elapsed Time: 453793
Ash Num of Sample: 11019
Wr Num of Sample: 475940
Average Active Sessions: 1.07
主要なアクティブテナント
このセクションでは、リソース消費をフロントエンドユーザーのリクエストとバックエンドタスクに分類し、テナント内全体のリソース消費状況を確認できます。
- Tenant Name:テナント名。特定のテナントを識別する情報です。
- Session Type:セッションタイプ。値はBACKGROUNDとFOREGROUNDのいずれかで、それぞれバックグラウンドプロセスとフロントエンドプロセスを示します。
- Total Samples:合計サンプル数。ASHレポートの分析時間範囲内の合計サンプル数を示します。
- Wait Event Count:待機イベント数。セッションが待機イベントに待機するサンプル数を示します。
- On CPU Samples:CPU上のサンプル数。セッションがCPU上で実行するサンプル数を示します。
- Avg Active Sessions:平均アクティブセッション数。サンプリング期間中、この段階で平均して同時でアクティブなデータベースセッション数(CPU上または待機イベント上に関わらず)を示します。
- % Activity:イベントのアクティビティ割合。指定された時間範囲内で、特定のテナントのアクティビティ(CPU + 待機)の割合を示します。
- Equivalent Client Load:ASHレポートの分析時間範囲内のクライアントとデータベースのアクティブ接続数。
これらの情報は、テナントのアクティビティの詳細を提供し、データベースのパフォーマンスのさまざまな側面や、テナントがリソースを使用する状況を明らかにします。
Top Active Tenantsモジュールでは、パフォーマンスの問題がデータベース内部から発生する場合もあれば、データベースとビジネスアプリケーションとのインタラクションのリンク上でも発生する場合があります。まず、パフォーマンスの問題が発生した指標であるEquivalent Client LoadとAvg Active Sessionsを確認する必要があります。これらの2つの指標は、データベースとリンクがパフォーマンスに与える影響を評価するために使用されます。比(Avg Active Sessions / Equivalent Client Load)が大きいほど、データベース内部のオーバーヘッドがパフォーマンスに与える影響が大きいことを示します。比が小さいほど、ネットワークリンクやクライアントがパフォーマンスに与える影響が大きいことを示します。
例えば、レポートに示されている比は88%であり、パフォーマンスの問題が主にデータベースの負荷によって引き起こされていることを示しています。データベースの負荷に問題があることが明確になった後は、次にデータベース内部のリソースのオーバーヘッドを分析する必要があります。Top Active Tenantsモジュールでは、フロントエンドユーザーのリクエストがデータベースリソースの69.65%を消費し、バックエンドタスクは約30%を占めています。そのため、パフォーマンスのボトルネックは主にユーザーリクエストの実行リンク上に発生しています。さらに、フロントエンドタスクの待機イベントが合計で1140秒のデータベース時間を消費し、CPU実行が72860秒を消費しています。これは、このビジネスモデルがディスクI/Oやネットワーク帯域幅などのリソース制限によって大量の待機を引き起こしているわけではなく、主にCPU実行に集中していることを示しています。ビジネスがバージョン上では正常に動作しているため、クラスタのCPUリソースは十分であると推定でき、パフォーマンスが低下している原因は、SQL実行リンクのいずれかの段階で実行効率がアップグレード後に低下した可能性があります。

チャートのトップノードの負荷
このチャートは、DB time メトリックのトップノードのパフォーマンス指標を表示しています。
IP:サーバーのIPアドレス。
Port:サーバーのポート番号。
Session Type:セッションタイプ。値はBACKGROUNDとFOREGROUNDのいずれかで、それぞれバックグラウンドプロセスとフロントエンドプロセスを表します。
Total Samples:合計サンプル数。ASHレポート分析期間内の合計サンプル数を示します。
Wait Event Samples:待機イベント数。セッションが待機イベントに待機するサンプル数を示します。
On CPU Samples:CPU上のサンプル数。セッションがCPU上での実行に伴うサンプル数を示します。
Avg Active Sessions:平均アクティブセッション数。サンプリング期間中、この段階で平均的に同時に何個のデータベースセッションがアクティブ状態にあるかを示します(CPU上でも待機イベントでもかまいません)。
% Activity:イベントのアクティビティ割合。指定された期間内に、特定のテナントで発生したアクティビティ(CPU + 待機)の割合を示します。
Equivalent Client Load:クライアントとデータベース間のアクティブな接続数。比値 (Avg Active Sessions/Equivalent Client Load) が大きいほど、データベース内部のオーバーヘッドがパフォーマンスに与える影響が大きくなります。比値が小さいほど、ネットワークリンクやクライアントがパフォーマンスに与える影響が大きくなります。
この情報は、データベースクラスタ内の各ノードの負荷関連のパフォーマンス指標を提供します。
このチャートは、DB time メトリックのトップノードのパフォーマンス指標を表示しています。

チャートのトップグループ
このチャートは、リソース消費量が上位のユーザー リソース管理グループ(Resource Consumer Groups)を表示しています。
Node:ノードアドレス。
Group Name:リソースグループのグループ名。
Group Samples:現在のリソースグループでサンプリングされたセッション活動レコードの数。
% Activity:イベントのアクティビティ割合。指定された期間内に、特定のテナントで発生したアクティビティ(CPU + 待機)の割合を示します。
Program:バックグラウンド セッションに対応するプロセス名。
% Program:このバックグラウンド セッション プロセスがリソースグループ(CPU、スレッドなど)に占める割合。
Module:プログラム内の機能モジュール名。
% Module:このモジュールがプログラムのアクティブ セッションに占める割合。プログラム内部のホットスポット操作を特定するために使用されます。
Action:モジュール内の具体的な操作。
% Action:この操作がモジュールのアクティブ セッションに占める割合。パフォーマンス分析の粒度をさらに細分化します。
Avg Active Sessions:平均アクティブセッション数。サンプリング期間中、この段階で平均的に同時に何個のデータベースセッションがアクティブ状態にあるかを示します(CPU上でも待機イベントでもかまいません)。
Slot Begin Time:セッション活動期間を記録する開始時間。形式は
YYYY-MM-DD HH:MM:SS(+ オフセット秒数)で、この統計期間の開始時刻を示します。Slot Count:現在の期間内の合計サンプリング回数。ASHはデフォルトで、アクティブ セッションの状態を1秒ごとにサンプリングします。Slot Countの値は、期間の長さ(秒単位)に等しくなります。
Action Key:アクティブ セッションをトリガーする操作タイプを識別するキー。特定のサービスまたはコンポーネントのリソース使用状況を特定するために使用されます。通常、以下の情報が含まれます:
- ソースノード:例
xx.xx.xx.xx:2882(IPアドレスとポート番号)。 - テナントとリソースグループ:例
tenant:1002/group:0。 - サービスタイプ:例
T1002_LogService-LogRestoreService-RemoteLogWriter(ログリカバリ サービス)。
- ソースノード:例
Action Samples:現在の期間内に、この操作(Action Key)がサンプリングされたアクティブ セッションの回数。値が高いほど、この操作がデータベース リソースに占める割合が高くなります。
この情報は、トップ リソース消費グループとその主要なパフォーマンス イベント、イベント発生の頻度、アクティビティ割合、および同時セッションの平均レベルなどの主要なパフォーマンス指標を提供します。

Top Foreground DB Time
このセクションでは、イベントタイプごとにデータベースのフロントエンド活動時間の主な消費要因をリストアップしています。
Node:ノードのアドレス。
Event Name:DB Timeを最も消費するイベント。待機イベントとCPU上のイベントを含みます。
Wait Class:待機イベントの種類。
Event Samples:各イベントがサンプリングされたセッション活動レコードの数。
Avg Active Sessions:平均アクティブセッション数。サンプリング期間中に、この段階で同時にアクティブなデータベースセッション数の平均値を示します(CPU上または待機イベントに関係なく)。
% Activity:イベントのアクティビティ割合。指定された期間内に、特定のテナントが実行したアクティビティ(CPU + 待機)の割合を示します。
これらの情報は、指定された分析期間内にフロントエンドセッションが消費したDB Timeの上位を示しています。
例えば、Top Foreground DB Timeのデータを見ると、業務タスクの実行中にトランザクションコンテキストへのアクセスによって引き起こされるロック競合の待機が存在していることが確認できますが、その負荷は全体の1%未満であり、また、トランザクションコミット(tx committing wait)に対応する待機イベントは見られませんでした。そのため、Top Active Tenantsで仮定されていた性能上の問題の2点は除外できます。
以上より、性能の低下はリソースのボトルネックによるものではなく、新しいバージョンの実行チェインで性能が戻っている可能性が高いことが確認されました。

Top Background DB Time
このセクションでは、バックグラウンドセッションが生成するDB Timeを表示しています。
Node:ノードのアドレス。
Program:バックグラウンドセッションに対応するプロセス名。
Module:プログラム内の機能モジュール名。
Action:モジュール内の具体的な操作。
Event Name:DB Timeを最も消費するイベント。待機イベントとCPU上のイベントを含みます。
Wait Class:待機イベントの種類。
Event Samples:各イベントがサンプリングされたセッション活動レコードの数。
% Activity:イベントのアクティビティ割合。指定された期間内に、特定のテナントが実行したアクティビティ(CPU + 待機)の割合を示します。
Avg Active Sessions:平均アクティブセッション数。サンプリング期間中に、この段階で同時にアクティブなデータベースセッション数の平均値を示します(CPU上または待機イベントに関係なく)。
これらの情報は、リソースを最も消費するバックグラウンドプロセス、それらが経験する主要なイベントタイプ、アクティビティの頻度、全体のDB Timeへの貢献割合、および同時アクティブセッションの平均レベルを提供します。

Top Sessions
このセクションでは、トップセッション(Top Sessions)の情報を表示しています。
Session ID:サンプリングされたセッションID。
Program:バックグラウンドセッションに対応するプロセス名。
% Activity:イベントのアクティビティ割合。指定された期間内に、特定のテナントが実行したアクティビティ(CPU + 待機)の割合を示します。
Avg Active Sessions:平均アクティブセッション数。サンプリング期間中に、この段階で同時にアクティブなデータベースセッション数の平均値を示します(CPU上または待機イベントに関係なく)。
Event Name:DB Timeを最も消費するイベント。待機イベントとCPU上のイベントを含みます。
Wait Class:待機イベントの種類。
% Event:イベントがデータベース全体のアクティビティに占める割合。高い割合は、システムのパフォーマンスに主要なボトルネックを引き起こしている可能性を示します。
SQL ID: SQLクエリの一意の識別子。
Plan Hash: 現在のSQL実行計画の数値。同じ計画には同じハッシュ値が割り当てられます。
% SQL ID: このイベントに関連するSQLステートメントがデータベース全体のアクティビティに占める割合。高い割合は、このSQLがリソース消費の主要な原因であることを示します。
Sql Executions: SQLステートメントが分析期間内に実行された回数。頻繁な実行はリソース競合やロック競合を引き起こす可能性があります。
これらの情報は、セッションごとに集計されたアクティブなセッションを表示します。サンプリングされたセッションID、アクティブセッションの割合、イベント、イベント数、イベントの割合、現在のユーザーとの比較、サンプリングされたアクティブ状態との比較などから、潜在的な問題を引き起こしているセッションを特定できます。

Top IO Bandwidth
このセクションでは、SQL およびバックグラウンド タスクの観点から、TOP I/O のスループットを一覧表示しています。
Node:ノードのアドレス。
Program Module Action/SQL ID:バックグラウンド タスクのタイプ(ログの集計、トランザクション ログの書き込みなど)/SQL クエリの一意の識別子。特定の SQL ステートメントのリソース使用量を追跡するために使用されます。
Plan Hash: 現在の SQL 実行計画の数値。同じ計画には同じハッシュ値があります。
Type:I/O 操作のタイプ。読み取りと書き込みの負荷のソースを区別します。
IOPS:1 秒あたりの I/O 要求回数。ストレージデバイスの負荷を反映します。高い IOPS は、頻繁な小規模データ操作を示す可能性があります。
IO Size(MB):タスクまたは SQL のサンプリング期間における合計読み取り/書き込みデータ量 (MB)。バックグラウンド タスクは通常、より大きなデータ量 (ログのバッチ書き込みなど) を処理します。
IO Bandwidth(MB/s):1 秒あたりの I/O スループット。ストレージ帯域幅の実際の使用率を測定します。帯域幅が低い場合、データの分散またはハードウェアの制限が原因である可能性があります。
Object ID:I/O 操作に関連する主なデータシャード。データがない場合は、データの分散がないか、サンプリング期間内にデータが収集されていないことを示します。
% Object ID:主なシャードの I/O 占有率。
これらの情報は、ノード、SQL ID、IOPS などのパラメータを提供し、SQL とバックグラウンド タスクの I/O スループットを分析します。読み取り/書き込みのタイプ、データ量、および分布の特徴を組み合わせることで、パフォーマンスのボトルネックを特定できます。

Top Blocking Sessions
このセクションでは、データベース内のロック (enqueues)、ラッチ (latches)、およびバッファ争用 (buffer busy) によって引き起こされるブロック セッションの問題を一覧表示しています。
Blocking Session ID:他のセッションをブロックするセッションの識別子。問題の原因を特定するために使用されます。
% Activity:ブロック セッションによって引き起こされるイベントの活動率。高い割合は、このセッションが主な争用の原因であることを示します。
Avg Active Sessions:ブロック セッションがサンプリング期間内に平均でアクティブなセッション数。サンプリング期間内に、この段階で平均して同時に何人のデータベース セッションがアクティブ状態にあるかを示します (CPU またはイベントの待ち状態を問いません)。
Holder User:ロックまたはリソースを保持するユーザー。
Holder TX ID:リソースを保持するトランザクション ID。
Holder SQL ID:リソースを保持する SQL ステートメントの識別子。特定の操作を関連付けるために使用されます。
Event Caused:ブロック セッションによって引き起こされる待機イベントのタイプ。
% Event:このイベントが同種のブロック イベントの中で占める割合。頻繁に発生する争用タイプを特定するのに役立ちます。
XIDs:関連するトランザクション ID の連鎖。トランザクション間の依存関係を追跡するために使用されます。
Top Waiting SQL ID:ブロック セッションによって最も影響を受けている SQL ステートメントの識別子。
% SQL ID:この SQL が総ブロック ウェイトに占める割合。影響力の高いクエリを優先的に最適化するために使用されます。
これらの情報は、Blocking Session ID、Holder TX ID などのフィールドを用いてブロック セッションの原因を正確に特定します。 % Activity と % Event の定量的な争用影響を組み合わせ、Holder SQL ID と Top Waiting SQL ID を用いて SQL レベルでの根本原因を関連付けることができます。さらに、XIDs を用いてトランザクションの連鎖を追跡することで、データベースのパフォーマンスのボトルネックをセッション、トランザクション、SQL に至るまで一連の診断能力を提供します。

Top Latchs
このセクションでは、データベース内で最も激しい争いを引き起こしているラッチを一覧表示しています。
Latch Wait Event:ラッチ待機イベントの名前。
Event Samples:各イベントがサンプリングされたセッション活動レコードの数。
% Activity:イベントの活動率。指定された期間内に、特定のテナントで CPU と待機を合わせた活動率を示します。
Avg Active Sessions:平均アクティブ セッション数。サンプリング期間内に、この段階で平均して同時に何人のデータベース セッションがアクティブ状態にあるかを示します (CPU またはイベントの待ち状態を問いません)。
これらの情報は、最も高い待機を引き起こすラッチ、その待機イベントの数、活動率、平均アクティブ セッション数を提供し、データベースの同時実行制御における主要なボトルネックを直接的に示しています。これらの情報は、ラッチ争用問題の診断と解決、待機時間の削減、システム応答速度と全体的なパフォーマンスの向上に極めて重要です。

Top DB Objects
このセクションでは、Application/Cluster/User I/O/buffer busy の 4 種類の主要な待機イベントを分析し、データベースオブジェクト(テーブル、パーティションなど)へのアクセス負荷と関連 SQL を定量化することで、高競合のホットスポットを特定します。
Node Address:ノードアドレス(IP:Port 形式)。分散環境における物理ノードの位置を識別するために使用されます。
Tenant ID:テナント ID。テナントの一意の識別子です。
Object ID:データベーステーブルの tablet_id。メタデータ関連付けに使用されます。
Avg Active Sessions:平均アクティブセッション数。サンプリング期間中に、このステージで平均して同時に何セッションのデータベースセッションがアクティブ状態にあったかを示します(CPU または待機イベントに関係なく)。
% Activity:イベントのアクティビティ割合。指定された期間内に、指定されたテナントで発生したアクティビティ(CPU + 待機)の割合を示します。
Execution Count:このオブジェクトに対する SQL の実行回数。頻繁なアクセスはリソース競合を引き起こす可能性があります。
Event:対応するトップ待機イベント(最大 5 つのイベントを表示します)。
% Event:対応するトップ待機イベントの割合(最大 5 つのイベントを表示します)。
SQL ID:待機イベントにおける負荷が高い SQL ID。
% SQL ID/Module:待機イベントにおける負荷が高い SQL ID または Module の割合。高影響クエリの最適化優先順位付けに使用されます。
Object Name (Type/Partition Name):アクセス対象のデータベースオブジェクトの名前、タイプ、パーティション情報。
これらの情報は、データベースオブジェクト(テーブル、パーティションなど)へのアクセス負荷、関連 SQL、および待機イベントを定量化することで、高リソース競合を引き起こすホットスポットオブジェクトを特定します。これにより、テーブル構造、インデックス設計、SQL 性能の最適化に直接的な根拠を提供します。

Activity Over Time
このセクションでは、時間間隔の情報に基づいて、分析期間中のデータベースのアクティビティの動的変化を示します。
Slot Begin Time:現在のタイムスロットの開始時間。各タイムスロットは、次のタイムスロットが開始するまでに終了します。
Slot Count:現在の時間帯におけるサンプリング回数の合計。ASH はデフォルトで、1 秒ごとにアクティブなセッション状態をサンプリングします。Slot Count の値は、時間帯の長さに等しく、単位は秒です。
Event Name:DB Time を最も消費するイベント。待機イベントと CPU 上のイベントを含みます。
Wait Class:待機イベントの所属するタイプ。
Event Samples:各イベントにサンプリングされたセッション活動レコードの数。
% Activity:イベントのアクティビティ割合。指定された期間内に、指定されたテナントで発生したアクティビティ(CPU + 待機)の割合を示します。
Avg Active Sessions:平均アクティブセッション数。サンプリング期間中に、このステージで平均して同時に何セッションのデータベースセッションがアクティブ状態にあったかを示します(CPU または待機イベントに関係なく)。
これらの情報は、時間系列として、分析期間中のデータベースのアクティビティの動的変化を詳細に描き出します。これには、主要なイベントの分布、アクティビティの強度、リソース競合の状況が時間とともにどのように変化するかが含まれます。これにより、パフォーマンスのトレンドを特定し、ピーク時間帯の管理、および時間軸に基づいたパフォーマンス最適化戦略を策定するための貴重な根拠が提供されます。

実行フェーズの上位
このセクションでは、実行フェーズにおける割合が比較的高いアクティビティが表示されており、セッションタイプごとに分類されています。SQL実行、PL/SQL処理、ストレージの読み書きなど、さまざまな側面をカバーしています。
Session Type:セッションタイプ。値はBACKGROUNDとFOREGROUNDのいずれかであり、それぞれバックグラウンドプロセスとフロントエンドプロセスを表します。
Phase of Execution:実行フェーズの名前。例えば、IN_SQL_EXECUTION(SQL実行)、IN_COMMITTING(コミット処理)、IN_PLSQL_EXECUTION(PL/SQL実行)などです。
Active Samples:各実行フェーズで発生した回数またはレコード数。
% Activity:イベントのアクティビティ割合。指定された期間内に、特定のテナントで発生したアクティビティ(CPU + 待機)の割合を示します。
SQL ID:待機イベントにおいて負荷が高いSQL ID。
% SQL ID/Module:待機イベントにおいて負荷が高いSQL IDまたはModuleの割合。影響力の高いクエリの最適化優先順位付けに使用されます。
ベースパスのパフォーマンス問題は通常、データベース内のすべてのリクエストに影響を与えるため、Top Execution Phaseはベースパス上のパフォーマンスへの影響を直感的に要約できます。
例えば、Top Execution Phaseモジュールの内容から、以下の情報が取得できます。
IN_SQL_EXECUTIONは69.65%のオーバーヘッドを占めており、これはSQLが実行計画を取得してから実行に移行するまでの総オーバーヘッドを表します。OceanBaseデータベースで定義されているいくつかの実行フェーズの中で、IN_SQL_EXECUTIONはIN_STORAGE_WRITE、IN_STORAGE_READ、IN_RPC_ENCODEを含みます。この指標から、SQLの主なオーバーヘッドは実行(EXECUTION)フェーズにあることがわかります。パーサー(PARSER)や実行計画キャッシュ(PLAN CACHE)フェーズでは、それほど大きなオーバーヘッドは発生しません。
IN_STORAGE_WRITEはIN_SQL_EXECUTIONフェーズのサブフェーズであり、この部分のオーバーヘッドが68.19%を占めています。これは、パフォーマンスの主なオーバーヘッドがmemtableへのデータ書き込みに発生していることを示しています。
IN_DEADLOCK_ROW_REGISTERはIN_STORAGE_WRITEのサブフェーズであり、この部分のオーバーヘッドが65.10%を占めています。これは、このシナリオのほとんどのオーバーヘッドがこのフェーズで発生していることを示しています。
上記の3つの指標は、インポート型タスクのベンチマークでは通常30%を上回りません。これは、インポート型タスクでは、システム全体のmemtableダンプ、clog同期、およびディスクへの書き込みを担当するバックグラウンドタスクが一部のCPUリソースを占めているためです。また、SQL解析や式計算などのフェーズも一部のCPUリソースを占めています。しかし、このタスクではIN_STORAGE_WRITEフェーズのオーバーヘッドが70%に達し、ベンチマークの参考値を大幅に上回っています。これは、このビジネスシナリオのパフォーマンス問題が主にこのフェーズで発生していることを示しています。 また、IN_DEADLOCK_ROW_REGISTERフェーズは、書き込まれたデータに保持されている行ロック情報をデッドロックマネージャー(Deadlock Manager)に登録し、バックグラウンドタスクがアクティブなトランザクションにデッドロックが存在するかどうかを検出できるようにします。通常、この操作はhashmapの値を更新・メンテナンスするだけなので非常に高速です。ベンチマークではこのフェーズのオーバーヘッドは通常3%を上回りませんが、このシステムではこの部分のオーバーヘッドが大幅にベンチマークの経験値を上回っています。
上記の分析から、パフォーマンスの問題がIN_DEADLOCK_ROW_REGISTERフェーズに発生していることがほぼ確定します。これはmemtableへの書き込みの一般的なパスであり、一般的なパスで発生するパフォーマンス問題は、特定のSQLに影響を与える場合もあれば、このパスを訪れるすべてのSQLのパフォーマンスに影響を与える場合もあります。この問題では、影響を受けるSQLの範囲をどのように特定すればよいでしょうか?
Top Execution Phaseセクションでは、OceanBaseデータベースで定義されている各フェーズの割合のオーバーヘッドをリストアップするだけでなく、各フェーズでオーバーヘッドが最も大きいSQLとその具体的な割合も表示しています。報告データから、IN_DEADLOCK_ROW_REGISTERフェーズでオーバーヘッドが最も大きいSQLはD5B2150EA75EB405C25592A65708DD21です。報告に表示されているテキスト情報によると、このSQLはINSERT文です:
INSERT INTO TRADE_BASE_000_LOAD_42
SELECT TRADE_NO, TRADE_NO
FROM TRADE_BASE_000_LOAD PARTITION(p42)
WHERE ROWNUM <= 50000000;
このSQLはIN_DEADLOCK_ROW_REGISTERフェーズで0.67%のオーバーヘッドを占めており、全体のフェーズのオーバーヘッドと比較して大幅に異なっています。これは、IN_DEADLOCK_ROW_REGISTERフェーズのオーバーヘッドが特定のSQLに集中しているのではなく、多くのSQLに分散していることを示しています。

Top IO Events
このセクションでは、SQLとバックグラウンドタスクのI/O待ちイベントを統計し、ディスクI/Oのボトルネックの原因を特定します。高負荷のSQL、バックグラウンドタスクのタイプ、具体的なデバイスのパフォーマンス指標を含みます。
Node:ノードのアドレスです。
Program Module Action/SQL ID:バックグラウンドタスクのタイプ(例:ログ集計、トランザクションログ書き込み)/SQLクエリの一意の識別子。特定のSQLステートメントのリソース消費を追跡します。
Plan Hash: 現在のSQL実行計画の数値。同じ計画には同じハッシュ値があります。
IO Event Samples:タスク実行中のI/O待ちイベントのサンプル総数です。
%IO Event Samples:すべてのサンプリングポイントにおけるI/O待ちイベントのサンプル総数の割合。I/Oリクエストの頻度を反映します。
Top Event:主要なI/O待ちイベントの名前です。
IO Type:I/O待ちイベントのタイプ(読み取り/書き込み/非同期)。操作モードを区別するために使用されます。
% EVENT:I/O待ちイベントのアクティブな割合です。
Enqueue Time(S):I/Oリクエストのキュー待ちの合計時間。単位は秒で、デバイスの混雑度を反映します。
Device Time(S):デバイス上でI/Oリクエストを実行する合計時間。単位は秒で、ディスクのパフォーマンスを測定します。
Callback Time(S):I/Oリクエストのコールバックを実行する合計時間。単位は秒です。
これらの情報は、SQLとバックグラウンドタスクのI/O待ちイベントを定量化し、デバイスのキュー待ち時間(Enqueue Time)と実行時間(Device Time)を組み合わせることで、高負荷のSQL(SQL IDとPlan Hashを用いて特定)およびディスク性能のボトルネックを特定し、I/O密集型操作の最適化に役立ちます。

Top SQL Statement Types
このセクションでは、ASHレポート分析期間内に、さまざまなステートメントタイプの実行状況を集計し、ビジネスパフォーマンスの問題がどのステートメントタイプで発生しているかを分析します。
SQL Statement Type:最も頻繁に実行されるSQLステートメントタイプをリストアップします。例:SELECT、UPDATE、INSERT、DELETEなどです。
Total Samples:指定されたSQLステートメントタイプが、ASHレポート分析期間全体で実行された総数です。
% Activity:イベントのアクティブな割合。指定された期間内に、指定されたテナントがアクティブな割合(CPU + 待機)を示します。
Sampled Executions:このタイプのSQLのサンプリングされた実行回数です(複数回の実行はパラメータの違いにより独立してカウントされる場合があります)。
Node:ノードのアドレスです。
% Node:このノードにおけるこの種類のSQLのアクティブな割合。ノードの負荷分散性を評価するために使用されます。
% On CPU:このタイプのSQLがCPU上で実行された時間の割合。高い値は計算負荷が高いことを示します(例:複雑な集計)。
% Event:このイベントがデータベース全体のアクティブな割合。高い割合は、このイベントがシステムのパフォーマンスの主要なボトルネックである可能性を示します。
これらの情報は、SQLステートメントの実行状況を分類して統計し、異なる操作タイプ(例:クエリ、更新)がデータベースリソースの消費とシステムのアクティブな割合に与える影響を明らかにします。これらのデータは、高負荷のSQLタイプを特定し、クエリ戦略を最適化し、リソースの割り当てをバランスよくし、ターゲットとしたパフォーマンスチューニングを行う上で重要です。

Top SQL with Top Events
このセクションでは、特定のトップイベントと最も関連性の高いSQLステートメントを表示しています。
SQL ID:待機イベントで負荷が高いSQL IDです。
Plan Hash:現在のSQL実行計画のハッシュ値。同じ実行計画には同じハッシュ値が割り当てられます。
Active Samples:各実行段階で発生した回数または記録数です。
% Activity:イベントのアクティブ割合を示し、指定された期間内に特定のテナントが行ったアクティビティ(CPU + 待機)の割合を表します。
Sampled Executions:このタイプのSQLのサンプリングされた実行回数です(複数回の実行はパラメータの違いにより独立してカウントされる場合があります)。
Top Event:主なI/O待機イベントの名前です。
% Event:このイベントがデータベース全体のアクティビティに占める割合です。高い割合は、このイベントがシステムのパフォーマンスの主要なボトルネックである可能性を示します。
Top Operator/ExecPhase:現在のSQL実行計画で最も時間がかかる操作または実行段階です。
% Operator/ExecPhase:この操作または段階がSQL全体の実行時間に占める割合です。実行計画のボトルネックを特定するために使用されます。
SQL Text: SQLクエリのテキストです。
これらの情報は、SQLステートメントの実行中に最も高いアクティビティ割合を占める具体的なイベントを示しており、パフォーマンスのボトルネックの核心を直接指しています。これらの「ボトルネック」イベントと関連するSQLを特定することで、データベース管理者はSQLステートメントの最適化、実行計画の調整、またはシステム設定の改善に取り組むことができます。これにより、待機時間を削減し、リソースの利用率を向上させることができます。
Top SQL with Top Eventsモジュールでは、全体の1%を超える実行時間を要する具体的なSQL情報が表示されます。このセクションの内容が空であることは、特定のSQLに性能問題が集中しているのではなく、全体的なSQL実行が遅くなっていることを示しています。報告書の情報から、性能問題の段階がデッドロック検出(IN_DEADLOCK_ROW_REGISTER)に関連していることがほぼ確実であり、これは一般的なパフォーマンスの問題であることがわかります。
Top SQL with Top Events:
- This Section lists the SQL statements that accounted for the highest percentages event.
- Plan Hash: Numeric representation of the current SQL plan
- Active Samples: num of samples for top current SQL
- % Activity: activity percentage for given SQL ID
- Sampled Executions: represents the number of times the current SQL execution has been sampled
- Top Event: top event name for current SQL plan
- % Event: activity percentage for current SQL plan
- Top Operator/ExecPhase: top operator name or execution phase for current event
- % Operator/ExecPhase: activity percentage for given operator
+----------------------------------------+--------------------+--------------------+--------------+--------------------+----------------------------------------------------------------+--------------+--------------------------------------------------------------------------------------------------------------------------------+------------------------+----------------------------------------------------------------+
| SQL ID| Plan Hash| Active Samples| % Activity| Sampled Executions| Top Event| % Event| Top Operator/ExecPhase| % Operator/ExecPhase| SQL Text|
+----------------------------------------+--------------------+--------------------+--------------+--------------------+----------------------------------------------------------------+--------------+--------------------------------------------------------------------------------------------------------------------------------+------------------------+----------------------------------------------------------------+
+----------------------------------------+--------------------+--------------------+--------------+--------------------+----------------------------------------------------------------+--------------+--------------------------------------------------------------------------------------------------------------------------------+------------------------+----------------------------------------------------------------+
Top SQL with Top Operator
このセクションでは、実行計画で特定の演算子を使用し、サンプルセッションのアクティビティに高い割合を占めるSQLステートメントを表示しています。
SQL ID:待機イベントで負荷が高いSQL IDです。
Plan Hash:現在のSQL実行計画のハッシュ値。SQL実行計画の一意性を識別するために使用されます。
Active Samples:各実行段階で発生した回数または記録数です。
% Activity:イベントのアクティブ割合を示し、指定された期間内に特定のテナントが行ったアクティビティ(CPU + 待機)の割合を表します。
Sampled Executions:このタイプのSQLのサンプリングされた実行回数です(複数回の実行はパラメータの違いにより独立してカウントされる場合があります)。
Top Operator:現在のSQL実行計画で最も時間がかかる操作です。
% Operator:この段階がSQL全体の実行時間に占める割合です。実行計画のボトルネックを特定するために使用されます。
Top Event:主なI/O待機イベントの名前です。
% Event:このイベントがデータベース全体のアクティビティに占める割合です。高い割合は、このイベントがシステムのパフォーマンスの主要なボトルネックである可能性を示します。
SQL Text: SQLクエリのテキストです。
これらの情報は、最も高いアクティビティ割合に関連するSQL演算子を提供し、データベース管理者と開発者にSQL実行パスの最適化を指す正確なガイドを示します。
Top SQL with Top Operator:
- This Section lists the SQL statements that accounted for the highest percentages of sampled session activity with sql operator
- Plan Hash: Numeric representation of the current SQL plan
- Active Samples: num of samples for top current SQL
- % Activity: activity percentage for given SQL ID
- Sampled Executions: represents the number of times the current SQL execution has been sampled
- Top Operator: top operator name for current SQL plan
- % Operator: activity percentage for given operator
- Top Event: top event name for current operator
- % Event: activity percentage for given event
+----------------------------------------+--------------------+--------------+--------------+--------------------+--------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------+--------------+----------------------------------------------------------------+
| SQL ID| Plan Hash|Active Samples| % Activity| Sampled Executions| Top Operator| % Operator| Top Event| % Event| SQL Text|
+----------------------------------------+--------------------+--------------+--------------+--------------------+--------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------+--------------+----------------------------------------------------------------+
+----------------------------------------+--------------------+--------------+--------------+--------------------+--------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------+--------------+----------------------------------------------------------------+
Top PL/SQL Procedures
このセクションでは、Top PL/SQL ストアドプロシージャの情報が表示されます。
PLSQL Entry Subprogram: アプリケーションのトップレベルの PL/SQL エントリサブプログラムを表示します。これは、プロシージャ (procedure)、関数 (function)、トリガー (trigger)、またはパッケージの初期化 (package initialization) である可能性があります。
% Activity:イベントのアクティブな割合を示し、指定された期間内に特定のテナントで発生したアクティビティ (CPU + 待機) の割合を表します。
PLSQL Current Subprogram: 現在実行中の PL/SQL サブプログラムを表示します。サンプリングポイントで実行中の PL/SQL サブプログラムです。値が
SQLの場合、特定の PL/SQL エントリサブプログラムで SQL を実行する割合を表します。値が--の場合、具体的なサブプログラムが実行されていないことを示します。% Current:現在のサブプログラム (PL/SQL Current Subprogram) がエントリサブプログラム内で占める時間割合です。現在のサブプログラムが SQL の場合、SQL の実行時間割合を反映します。
これらの情報は、トップレベルのエントリサブプログラムと現在実行中のサブプログラムに関する情報、およびアクティブな割合を含む、Top PL/SQL ストアドプロシージャの実行状況を提供します。
Top PL/SQL Procedures:
- "PL/SQL Entry Subprogram" represents the application's top-level entry-point(procedure, function, trigger, package initialization) into PL/SQL.
- "PL/SQL Current Subprogram" is the pl/sql subprogram being executed at the point of sampling. If the value is "SQL", it represents the percentage of time spent executing SQL for the particular plsql entry subprogram.
- "PL/SQL Entry Subprogram" represents the application's top-level subprogram name
+------------------------------------------------------------+--------------------+------------------------------------------------------------+--------------------+
| PLSQL Entry Subprogram| % Activity| PLSQL Current Subprogram| % Current|
+------------------------------------------------------------+--------------------+------------------------------------------------------------+--------------------+
| oceanbase.dbms_workload_repository.ASH_REPORT| 0.00%| oceanbase.dbms_workload_repository.ASH_REPORT_TEXT| 0.00%|
+------------------------------------------------------------+--------------------+------------------------------------------------------------+--------------------+
Complete List of SQL Text(V4.3.5 BP5 以前のバージョン)
このセクションでは、SQL クエリの SQL ID と SQL クエリのテキスト情報を含む SQL テキスト (SQL Text) のリストが表示されます。
SQL ID: SQL クエリの一意の識別子です。
SQL Text: SQL クエリのテキストです。
これらの情報は、SQL クエリリストに関するものであり、クエリの識別、分析、およびパフォーマンスの最適化に使用できます。

Complete List of SQL Text And Status(V4.3.5 BP5 以降のバージョン)
このセクションでは、SQL ステートメントとその実行状態のリストが表示されます。このリストには、パフォーマンス分析に重要なキーメトリクスが含まれています。注意すべきは、リソース消費が低いことが理由で、実行効率が非常に高い SQL ステートメントはこのリストに表示されない場合があるということです。
First Load Time: 実行計画が最初にキャッシュにロードされた時間、つまり計画が生成された時間です。
Plan Cache Hit Rate: 実行計画キャッシュのヒット率。つまり、キャッシュから計画を取得することに成功した割合(再生成せずに取得できた割合)です。
AVG RPC: 1回の SQL ステートメントの実行時に、リモートプロシージャコール (RPC) を開始する平均回数です。
AVG Partition: 1回の実行で平均してアクセスしたパーティションの数です。
Route Miss Rate: パーティションルーティングエラーが発生したリクエストの割合。つまり、リクエストが誤ってターゲットデータノードを含まないノードに送信された確率です。
AVG Disk Reads: 1回の実行で平均してディスクから読み取ったデータの平均バイト数です。
Muti Query Rate: マルチステートメントクエリ (複数の SQL ステートメントを含むリクエスト) の割合です。
Muti Query Batch Rate: バッチ処理モードで実行されたリクエストの割合です。
AVG Error: リクエストあたりの平均エラー発生回数です。
Full Table Scan Rate: 実行計画に含まれるフルテーブルスキャン操作の割合です。
AVG Retry: 1回の実行で、タイムアウトや競合などの理由により再試行された平均回数です。
Executions: 指定された期間内にこの SQL ステートメントが実行された総回数です。
AVG Elapsed Time: 1回の SQL ステートメントの実行に平均してかかった時間です。

これらの情報は、SQL クエリの実行効率、リソース消費、安定性に関する包括的なビューを提供し、パフォーマンスのボトルネックを迅速に特定し、クエリの最適化、およびデータベースの設定調整に役立てることができます。
SQLテキストとステータスの完全な一覧(V4.3.5 BP5以降のバージョン)
このセクションでは、SQLステートメントとその実行状態のリストが表示され、パフォーマンス分析に重要な指標が含まれています。注意すべきは、リソース消費が低いことから、最も効率的に実行されるSQLステートメントがこのリストに表示されない場合があることです。
- First Load Time: 実行計画が初めてキャッシュにロードされた時間、つまり計画が生成された時間です。
- Plan Cache Hit Rate: 実行計画キャッシュのヒット率。つまり、キャッシュから計画を取得することに成功した回数の割合です。
- AVG RPC: このSQLステートメントを実行するたびに、リモートプロシージャコール(RPC)を開始する平均回数です。
- AVG Partition: 実行ごとに平均してアクセスするパーティションの数です。
- Route Miss Rate: パーティションルーティングエラーが発生したリクエストの割合。つまり、リクエストが誤って対象データノードを含まないノードに送信された確率です。
- AVG Disk Reads: 実行ごとに平均してディスクから読み取ったデータの平均バイト数です。
- Muti Query Rate: マルチクエリ(複数のSQL文を含むリクエスト)が占める割合です。
- Muti Query Batch Rate: バッチ処理モードで実行されたリクエストが占める割合です。
- AVG Error: 各リクエストで平均して発生するエラーの回数です。
- Full Table Scan Rate: 実行計画に含まれるフルテーブルスキャンの操作が占める割合です。
- AVG Retry: 実行ごとに、タイムアウトや競合などの理由によりリトライされた平均回数です。
- Executions: このSQLステートメントが統計期間内に実行された総回数です。
- AVG Elapsed Time: このSQLステートメントを実行するために平均してかかる時間です。

これらの情報は、SQLクエリの実行効率、リソース消費、安定性を総合的に示す視点を提供し、パフォーマンスのボトルネックを迅速に特定し、クエリステートメントを最適化し、データベース設定を調整するのに役立ちます。
関連する待機イベント
一般的な待機イベント に基づいて、各待機イベントの意味を確認することで、分析レポートを検討する際に、迅速に問題を特定できます。