この章では、サンプル・データを使用して、Oracle Databaseの一時的なパフォーマンスの問題を特定する方法を説明しており、内容は次のとおりです。
一時的なパフォーマンスの問題は、短期的なものであり、自動データベース診断モニター(ADDM)による分析には表れません。ADDMでは、DB時間への影響の観点から、分析期間中に最も重要なパフォーマンス上の問題をレポートしようと試みます。パフォーマンス問題がADDMで取得されるかどうかは、AWRのスナップショット間隔と比較する期間によって決まります。
スナップショット間で相当な時間続くパフォーマンスの問題の場合、ADDMにより取得されます。たとえば、スナップショット間隔が1時間に設定されている場合、30分間続くパフォーマンスの問題は、この期間がスナップショット間隔で相当な時間を占め、ADDMにより取得される可能性が高いため、一時的なパフォーマンスの問題と考えるのは不適切です。
特定の問題の継続期間がごく短い場合、その重大度は、分析期間にわたり平均化されるか、他のパフォーマンス問題によって最小化されるため、問題がADDMの検出結果に表れない場合があります。スナップショット間隔が1時間に設定されている同じ例を使用した場合、継続期間がわずか2分のパフォーマンスの問題は、その期間がスナップショット間隔に占める割合が小さいためADDMの検出結果に現れにくく、一時的なパフォーマンスの問題と言えます。
一時的なパフォーマンスの問題を特定しやすくするため、Oracle Databaseではアクティブ・セッションが毎秒サンプリングされ、サンプル・データが共有グローバル領域(SGA)の循環バッファに格納されます。データベースに接続中で、Idle待機クラスに属さないイベントを待機中のセッションは、アクティブ・セッションとみなされます。アクティブ・セッションのみを取得することで、システム上で許可されるセッション数ではなく、実行される作業に直接関連するサイズで管理可能なデータ・セットが表示されます。
アクティブ・セッション履歴(ASH)を使用すると、V$ACTIVE_SESSION_HISTORY
ビューのサンプル・セッション・アクティビティを検査して詳細な分析を実行できます。ASHに存在するデータは、指定した期間に取得する各種ディメンションでロール・アップされ、ASHレポートに収集されます。
注意:
プラガブル・データベース(PDB)とともにASH機能を使用している場合には、データ可視性および権限の要件が異なります。ASH機能を含む管理性の機能がマルチテナント・コンテナ・データベース(CDB)で機能する仕組みの詳細は、『Oracle Database管理者ガイド』を参照してください。
関連項目:
ASHの詳細は、「アクティブ・セッション履歴の統計」を参照してください
ASHレポートを使用すると、次の分析の実行が可能になります。
通常数分間で収まる一時的なパフォーマンスの問題
時間、セッション、モジュール、アクション、またはSQL識別子など、様々なディメンションやその組合せによる、指定範囲または特定のターゲットのパフォーマンス分析
ASHレポートは複数のセクションに分かれています。HTMLレポートには、セクション間ですばやくナビゲートできるようにリンクが組み込まれています。レポートの内容には、指定された期間の、ブロッカIDおよび待機中IDとその関連トランザクション識別子、およびSQL文の識別に使用されたASH情報が含まれています。
この項では、ASHレポートの生成方法を説明しており、内容は次のとおりです。
ASHレポートを生成するための主インタフェースは、Oracle Enterprise Managerです。可能な場合は、Oracle Enterprise Managerを使用してASHレポートを生成してください。
Oracle Enterprise Managerを使用できない場合は、SQLスクリプトを実行してASHレポートを生成します。これらのスクリプトを実行するには、DBAロールが必要です。
関連項目:
Oracle Enterprise Managerを使用したASHレポートの生成については、『Oracle Database 2日でパフォーマンス・チューニング・ガイド』を参照してください
この項では、コマンドライン・インタフェースでSQLスクリプトを実行し、ASHレポートを生成する方法を説明します。
この項の内容は次のとおりです。
ashrpt.sql
SQLスクリプトでは、ローカル・データベース・インスタンスの指定された期間のASH情報を表示する、HTMLまたはテキストのレポートが生成されます。
コマンドライン・インタフェースを使用して、ローカル・データベース・インスタンスにASHレポートを生成するには、次のようにします。
SQLプロンプトで次のように入力します。
@$ORACLE_HOME/rdbms/admin/ashrpt.sql
レポートの形式としてHTMLまたはテキストのいずれかを指定します。
Enter value for report_type: text
この例では、テキスト形式のレポートが選択されます。
システム日付より前の開始時間を分単位で指定します。
Enter value for begin_time: -10
この例では、現在の時刻より10分前が選択されます。
開始時間からASH情報を取得する期間を分単位で指定します。
Enter value for duration:
この例では、システム日付から開始時間をマイナスしたデフォルトの期間が使用されます。
レポート名を入力するか、デフォルトのレポート名を受け入れます。
Enter value for report_name: Using the report name ashrpt_1_0310_0131.txt
この例では、デフォルト名が使用され、ashrpt_1_0310_0131
というASHレポートが生成されます。このレポートでは、現在の時刻の10分前から開始され、現在の時刻で終了するASH情報が収集されます。
ashrpti.sql
SQLスクリプトでは、指定されたデータベースおよびインスタンスの指定された期間のASH情報を表示する、HTMLまたはテキストのレポートが生成されます。このスクリプトでは、ASHレポートの生成に使用されるデータベースおよびインスタンスを指定できます。
コマンドライン・インタフェースを使用して、特定のデータベース・インスタンスにASHレポートを生成するには、次のようにします。
SQLプロンプトで次のように入力します。
@$ORACLE_HOME/rdbms/admin/ashrpti.sql
レポートの形式としてHTMLまたはテキストのいずれかを指定します。
Enter value for report_type: html
この例では、HTML形式のレポートが選択されます。
使用可能なデータベースIDおよびインスタンス番号のリストが表示されます。
Instances in this Workload Repository schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DB Id Inst Num DB Name Instance Host ----------- -------- ------------ ------------ ------------ 3309173529 1 MAIN main examp1690 3309173529 1 TINT251 tint251 samp251
次のようにデータベース識別子(dbid
)およびインスタンス番号(inst_num
)の値を入力します。
Enter value for dbid: 3309173529 Using 3309173529 for database id Enter value for inst_num: 1
フィジカル・スタンバイ・インスタンスのASHレポートを生成するには、スタンバイ・データベースを読取り専用でオープンする必要があります。ディスク上のASHデータはプライマリ・データベースでのアクティビティを表し、メモリー内のASHデータはスタンバイ・データベースでのアクティビティを表します。
注意:
この手順は、Active Data Guardフィジカル・スタンバイ・インスタンスのASHレポートを生成する場合にのみ該当します。そうでない場合は、この手順をスキップしてください。
レポートの生成に、プライマリ・データベースまたはスタンバイ・データベースのどちらのサンプリング・データを使用するかを指定します。
You are running ASH report on a Standby database. To generate the report over data sampled on the Primary database, enter 'P'. Defaults to 'S' - data sampled in the Standby database. Enter value for stdbyflag: Using Primary (P) or Standby (S): S
この例では、デフォルト値のスタンバイ(S)が選択されています。
システム日付より前の開始時間を分単位で指定します。
Enter value for begin_time: -10
この例では、現在の時刻より10分前が選択されます。
開始時間からASH情報を取得する期間を分単位で指定します。
Enter value for duration:
この例では、システム日付から開始時間をマイナスしたデフォルトの期間が使用されます。
レポートの「アクティビティの経過(Activity Over Time)」セクションで使用する時間帯(秒数)を指定します。
Enter value for slot_width:
この例では、デフォルト値を使用します。「アクティビティの経過(Activity Over Time)」セクションおよび時間帯の指定方法の詳細は、「アクティビティの経過(Activity Over Time)」を参照してください。
後続のプロンプトの手順に従って、次のレポート・ターゲットの値を入力します。
target_session_id
target_sql_id
target_wait_class
target_service_hash
target_module_name
target_action_name
target_client_id
target_plsql_entry
レポート名を入力するか、デフォルトのレポート名を受け入れます。
Enter value for report_name: Using the report name ashrpt_1_0310_0131.txt
この例では、デフォルト名が使用され、ashrpt_1_0310_0131
というASHレポートが生成されます。このレポートでは、3309173529
というデータベースIDを持つデータベース・インスタンスにおいて、現在の時刻の10分前から開始され、現在の時刻で終了するASH情報が収集されます。
ashrpti.sql
SQLスクリプトは、Oracle Real Application Clusters (Oracle RAC)環境の指定されたデータベースおよびインスタンスにおける指定された期間のASH情報を表示する、HTMLまたはテキストのレポートを生成します。ディスクに書き込まれるASHデータのみがレポートの生成に使用されます。このレポートでは、DBA_HIST_ACTIVE_SESS_HISTORY
表にある最後の10分間でのASHサンプルのみが使用されます。
Oracle RAC ASHレポートを生成するには、次のようにします。
SQLプロンプトで次のように入力します。
@$ORACLE_HOME/rdbms/admin/ashrpti.sql
レポートの形式としてHTMLまたはテキストのいずれかを指定します。
Enter value for report_type: html
この例では、HTML形式のレポートが選択されます。
使用可能なデータベースIDおよびインスタンス番号のリストが表示されます。
Instances in this Workload Repository schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DB Id Inst Num DB Name Instance Host ----------- -------- ------------ ------------ ------------ 3309173529 1 MAIN main examp1690 3309173529 1 TINT251 tint251 samp251 3309173529 2 TINT251 tint252 samp252 3309173529 3 TINT251 tint253 samp253 3309173529 4 TINT251 tint254 samp254
次のようにデータベース識別子(dbid
)およびインスタンス番号(inst_num
)の値を入力します。
Enter value for dbid: 3309173529 Using database id: 3309173529 Enter instance numbers. Enter 'ALL' for all instances in an Oracle RAC cluster or explicitly specify list of instances (e.g., 1,2,3). Defaults to current instance. Enter value for inst_num: ALL Using instance number(s): ALL
システム日付より前の開始時間を分単位で指定します。
Enter value for begin_time: -1:10
この例では、現在の時刻より1時間10分前が選択されます。
開始時間からASH情報を取得する期間を分単位で指定します。
Enter value for duration: 10
この例では、期間は10分間に設定されます。
レポートの「アクティビティの経過(Activity Over Time)」セクションで使用する時間帯(秒数)を指定します。
Enter value for slot_width:
この例では、デフォルト値を使用します。「アクティビティの経過(Activity Over Time)」セクションおよび時間帯の指定方法の詳細は、「アクティビティの経過(Activity Over Time)」を参照してください。
後続のプロンプトの手順に従って、次のレポート・ターゲットの値を入力します。
target_session_id
target_sql_id
target_wait_class
target_service_hash
target_module_name
target_action_name
target_client_id
target_plsql_entry
レポート名を入力するか、デフォルトのレポート名を受け入れます。
Enter value for report_name: Using the report name ashrpt_rac_0310_0131.txt
この例では、デフォルト名が使用され、ashrpt_rac_0310_0131
というASHレポートが生成されます。このレポートでは、3309173529
というデータベースIDを持つデータベースに所属するすべてのインスタンスにおいて、現在の時刻の1時間10分前から開始され、現在の時刻の1時間前に終了するASH情報が収集されます。
ASHレポートを生成したら、その内容を確認して一時的なパフォーマンス問題の可能性のある原因を特定します。
ASHレポートの内容は、次のセクションに分けられます。
関連項目:
Oracle Real Application Clusters(Oracle RAC)に固有のASHレポートのセクションの詳細は、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。
「上位イベント(Top Events)」セクションは、ユーザー、バックグラウンドおよび優先順位で分類されたサンプル・セッション・アクティビティの上位待機イベントを示します。このセクションの情報を使用して、一時的なパフォーマンス問題の原因となっている可能性のある待機イベントを特定します。
「上位イベント(Top Events)」セクションには、次のサブセクションが含まれます。
「Top Background Events」サブセクションはサンプリングされたセッション・アクティビティの最も高い割合を占めるバックグラウンドからの上位の待機イベントをリストします。
「上位イベントP1/P2/P3(Top Event P1/P2/P3)」サブセクションでは、サンプリングされたセッション・アクティビティの最も高い割合を占める、上位の待機イベントの待機イベント・パラメータ値がリストされ、総待機時間の割合(%イベント)の順に表示されます。各待機イベントにおいて、「P1値、P2値、P3値(P1 Value, P2 Value, P3 Value)」列の値は、「パラメータ1(Parameter 1)」、「パラメータ2(Parameter 2)」、「パラメータ3(Parameter 3)」の各列に表示される待機イベント・パラメータに対応します。
「ロード・プロファイル(Load Profile)」セクションは、サンプル・セッション・アクティビティで分析された負荷を示します。このセクションの情報を使用して、一時的なパフォーマンス問題の原因となっている可能性のあるサービス、クライアントまたはSQLコマンド・タイプを特定します。
「ロード・プロファイル(Load Profile)」セクションには、次のサブセクションが含まれます。
「Top Client IDs」サブセクションに、クライアントIDに基づいてサンプリングされたセッション・アクティビティの最も高い割合を占めるクライアントがリストされます。クライアントIDはデータベース・セッションのアプリケーション固有の識別子です。
上位SQLのコマンド・タイプ・サブセクションには、サンプリングされたセッション・アクティビティの最も高い割合を占めるSQLコマンド・タイプ(SELECT
またはUPDATE
コマンド)がリストされます。
「上位SQL」セクションではサンプリングされたセッション・アクティビティの上位SQL文を説明します。この情報を使用して、一時的なパフォーマンス問題の原因となっている可能性のある高負荷のSQL文を特定します。
「上位SQL(Top SQL)」セクションには、次のサブセクションが含まれます。
「上位SQLと上位イベント(Top SQL with Top Events)」サブセクションは、サンプル・セッション・アクティビティで最高の割合を占めるSQL文と、それらのSQL文に対して発生した上位待機イベントを示します。「実行のサンプリング数」列に、特定のSQL文ごとに実行のサンプリング数が表示されます。
「上位SQLと上位行ソース(Top SQL with Top Row Sources)」サブセクションは、サンプル・セッション・アクティビティで最高の割合を占めるSQL文と、それらの詳細な実行計画情報を示します。この情報を使用することで、SQLの経過時間に多くの影響を与えているSQL実行部分を特定できます。
「リテラルを使用する上位SQL(Top SQL Using Literals)」サブセクションは、サンプル・セッション・アクティビティで最高の割合を占めるリテラルを使用するSQL文を示します。このレポートにリストされた文を確認して、リテラルをバインド変数に置換できるかどうかを決定する必要があります。
「上位解析モジュール/アクション(Top Parsing Module/Action)」サブセクションは、サンプル・セッション・アクティビティで最高の割合を占めるSQL文解析時のモジュールおよびアクションを示します。
「上位PL/SQL(Top PL/SQL)」セクションは、サンプル・セッション・アクティビティで最高の割合を占めるPL/SQLプロシージャを示します。
「PL/SQLエントリ・サブプログラム(PL/SQL Entry Subprogram)」列は、PL/SQLに対するアプリケーションの最上位レベルのエントリ・ポイントを示します。「PL/SQL現行サブプログラム(PL/SQL Current Subprogram)」列は、サンプリング時点で実行されていたPL/SQLサブプログラムを示します。この列の値がSQL
の場合、「%現行(% Current)」列に、このサブプログラムのSQL実行にかかった時間の割合が示されます。
「上位セッション(Top Sessions)」セクションは、特定の待機イベントを待機していたセッションを示します。この情報を使用して、一時的なパフォーマンス問題の原因となっている可能性のある、サンプリングされたセッション・アクティビティの最も高い割合を占めるセッションを特定します。
「上位セッション(Top Sessions)」セクションには、次のサブセクションが含まれます。
「上位のブロック・セッション(Top Blocking Sessions)」サブセクションは、サンプル・セッション・アクティビティで最高の割合を占めるブロック・セッションを示します。
「上位オブジェクト/ファイル/ラッチ(Top Objects/Files/Latches)」セクションは、最もよく使用されるデータベース・リソースに関する追加情報を示し、次のサブセクションを含みます。
「上位ラッチ(Top Latches)」サブセクションは、サンプル・セッション・アクティビティで最高の割合を占めるラッチを示します。
ラッチは、単純で低レベルなシリアライズ・メカニズムで、システム・グローバル領域(SGA)の共有データ構造の保護に使用されます。たとえば、ラッチにより、データベースに現在アクセスしているユーザーのリストと、バッファ・キャッシュのブロックを記述するデータ構造が保護されます。サーバーまたはバックグラウンド・プロセスは、これらの構造の操作または調査時に、ごく短時間ラッチを取得します。ラッチの実装は、特に、プロセスがラッチを待機するかどうかとその待機時間に関して、オペレーティング・システムに依存します。
「アクティビティの経過(Activity Over Time)」セクションは、ASHレポートの中で最も有益な情報の含まれるセクションの1つです。このセクションには、分析期間中のアクティビティおよびワークロード・プロファイルに関する詳細な情報が含まれるため、長い期間分析する場合に特に役立ちます。
「アクティビティの経過(Activity Over Time)」セクションは、10個の時間帯に分けられます。各時間帯のサイズは、分析期間の継続時間に基づいて変化します。通常、最初と最後の時間帯は、余り部分になります。その内側の時間帯は、すべて同じサイズで、相互に比較できます。たとえば、分析期間が10分間続くと、すべての時間帯がそれぞれ1分となります。ただし、分析期間が9分30秒続くと、両端の時間帯はそれぞれ15秒となり、内側の時間帯はそれぞれ1分となります。
表9-1に示すとおり、各時間帯にはその特定の時間帯に関する情報が含まれます。
表9-1 アクティビティの経過
列 | 説明 |
---|---|
スロット時間(継続時間) |
スロットの期間 |
スロット数 |
スロット内のサンプリングされたセッションの数 |
イベント |
スロット内の上位3つの待機イベント |
イベント数 |
待機イベントを待機中のASHサンプルの数 |
%イベント |
分析期間全体での待機イベントを待機していたASHサンプルの割合 |
内側の時間帯を比較する場合、「イベント数(Event Count)」列と「時間帯の数(Slot Count)」列のスパイクを識別して、スキュー解析を実行します。「イベント数(Event Count)」列のスパイクは、特定のイベントを待機しているサンプル・セッションの数の増大を示します。「時間帯の数(Slot Count)」列のスパイクは、アクティブ・セッションの増大(ASHデータはアクティブ・セッションからのみサンプリングされるため)と、データベース・ワークロードの相対的な増大を示します。通常、アクティブ・セッションのサンプルの数と、待機イベントに関連付けられたセッションの数が増えた場合、スロットは一時的なパフォーマンス問題の原因となる可能性があります。
ユーザー定義の時間帯サイズでASHレポートを生成するには、「特定のデータベース・インスタンスのASHレポートの生成」の手順に従ってashrpti.sql
スクリプトを実行します。