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 Report
このセクションでは、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実行パスの特定の段階での実行効率が低下したことに関連している可能性があります。
Top Node Load
このセクションでは、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文の実行回数です。頻繁な実行はリソース競合やロック競合を引き起こす可能性があります。
これらの情報は、Sessionを軸に並べ替えて活動的なSessionの統計を提供します。サンプリングされたセッションID、活動セッションの割合、イベント、イベント数、イベントの割合、現在のユーザーとサンプリングされた活動状態との比較により、潜在的な問題を抱えるSessionを容易に特定できます。
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 Latches
このセクションでは、データベース内で競争が最も激しいラッチを表示します。
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:対応するTop待機イベント(最大5個のイベントを出力)。
% Event:対応するTop待機イベントの割合(最大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つの指標は、インポート型タスクのベンチマーク(benchmark)では通常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に分散していることを示しています。
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
このセクションでは、トップ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%|
+------------------------------------------------------------+--------------------+------------------------------------------------------------+--------------------+
Complete List of SQL Text And Status
このセクションでは、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クエリの実行効率、リソース消費、および安定性に関する包括的なビューを提供し、パフォーマンスボトルネックの迅速な特定、クエリ文の最適化、データベース設定の調整に利用できます。
関連する待機イベント
一般的な待機イベント を参照して、各待機イベントが表す意味を確認し、レポートの分析時に問題を迅速に特定できます。