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 Latches、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:オペレーティングシステム情報。カーネルバージョンとアーキテクチャが含まれます。
- 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
Top Active Tenants
このセクションでは、リソース消費をフロントエンドユーザー要求とバックグラウンドタスクに分けて表示し、テナント内全体のリソース消費状況を把握できます。
- 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メトリクスのトップノードに関するパフォーマンス指標が表示されます。

Top Groups
このセクションでは、リソース消費量が上位のユーザーリソース管理グループ(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割合です。
これらの情報は、Node、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を表示します。
Latch Wait Event:Latch待機イベント名。
Event Samples:各イベントがサンプリングされたセッション活動レコードの数。
% Activity:イベントの活動割合であり、指定されたテナントが指定された期間内の活動(CPU + 待機)の割合を示します。
Avg Active Sessions:平均アクティブセッション数であり、サンプリング期間中のその段階で平均して同時にいくつのデータベースセッションがアクティブ状態(CPU上であれイベント待ちであれ)にあったかを示します。
これらの情報は、最も高い待機時間を引き起こしたLatch、それらの待機イベントのカウント、活動割合、および平均アクティブセッション数を提供し、データベース内の並行制御の鍵となるボトルネックを直接指摘します。これらの情報は、Latch競合問題の診断と解決、待機時間の短縮、システム応答速度と全体的なパフォーマンスの向上に極めて重要です。

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上または待機イベント中)にあったかを示します。
これらの情報は、時間系列で詳細に描き出された分析期間内のデータベース活動の動的変化を提供し、重要なイベントの分布、活動強度、リソース競合状況の経時的変遷を含みます。これは、パフォーマンス問題の傾向の特定、ピーク時の管理、時間軸に基づくパフォーマンス最適化戦略の策定に貴重な根拠を提供します。

Top Execution Phase
このセクションでは、実行フェーズにおいて割合の高いアクティビティを表示し、セッションタイプ別に分類しています。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のvalueを更新・維持するだけであり、非常に高速な処理です。ベンチマークではこのフェーズのオーバーヘッドは通常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に分散していることを示しています。

トップIOイベント
このセクションでは、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集約型操作の最適化の根拠を提供します。

トップSQLステートメントタイプ
このセクションでは、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|
+----------------------------------------+--------------------+--------------+--------------+--------------------+--------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------+--------------+----------------------------------------------------------------+
+----------------------------------------+--------------------+--------------+--------------+--------------------+--------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------+--------------+----------------------------------------------------------------+
トップPL/SQLプロシージャ
このセクションでは、トップ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実行時間の割合を反映します。
この情報は、トップレベルのエントリサブプログラムと現在実行中のサブプログラムに関する情報、および活動割合を含む、トップ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%|
+------------------------------------------------------------+--------------------+------------------------------------------------------------+--------------------+
SQLテキストとステータスの完全なリスト
このセクションでは、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クエリの実行効率、リソース消費、安定性に関する包括的なビューを提供し、パフォーマンスボトルネックの迅速な特定、クエリ文の最適化、データベース設定の調整に利用できます。
関連する待機イベント
一般的な待機イベント を参照して、各待機イベントが表す意味を確認し、レポートの分析時に問題を迅速に特定できるようにしてください。