9 サンプル・データの分析

この章では、サンプル・データを使用して、Oracle Databaseの一時的なパフォーマンスの問題を特定する方法を説明しており、内容は次のとおりです。

9.1 アクティブ・セッション履歴について

アクティブ・セッション履歴(ASH)は診断ツールで、Oracleデータベースのすべてのアクティブ・セッションに関する情報を記録します。

短時間のパフォーマンスの問題は、一時的なものであるため、自動データベース診断モニター(ADDM)分析では把握できない場合があります。ASH診断ツールは、アクティブ・セッションを毎秒サンプリングし、サンプル・データを共有グローバル領域(SGA)の循環バッファに格納することで、一時的なパフォーマンスの問題を捕捉します。データベースに接続中で、Idle待機クラスに属さないイベントを待機中のセッションは、アクティブ・セッションとみなされます。アクティブ・セッションのみを取得することで、システム上で許可されるセッション数ではなく、実行される作業に直接関連するサイズで管理可能なデータ・セットが表示されます。

ASHを使用すると、V$ACTIVE_SESSION_HISTORYビューで、サンプル・セッション・アクティビティを検査して詳細な分析を実行できます。ASHに存在するデータは、指定した期間に取得する各種ディメンションでロール・アップされ、ASHレポートに収集されます。

注意:

ADDMでは、DB時間への影響の観点から、分析期間中に最も重要なパフォーマンス上の問題をレポートしようと試みます。パフォーマンス問題がADDMで取得されるかどうかは、AWRのスナップショット間隔と比較する期間によって決まります。

スナップショット間で相当な時間続くパフォーマンスの問題の場合、ADDMにより取得されます。たとえば、スナップショット間隔が1時間に設定されている場合、30分間続くパフォーマンスの問題は、この期間がスナップショット間隔で相当な時間を占め、ADDMにより取得される可能性が高いため、一時的なパフォーマンスの問題と考えるのは不適切です。

特定の問題の継続期間がごく短い場合、その重大度は、分析期間にわたり平均化されるか、他のパフォーマンス問題によって最小化されるため、問題がADDMの検出結果に表れない場合があります。スナップショット間隔が1時間に設定されている同じ例を使用した場合、継続期間がわずか2分のパフォーマンスの問題は、その期間がスナップショット間隔に占める割合が小さいためADDMの検出結果に現れにくく、一時的なパフォーマンスの問題と言えます。

関連項目:

9.2 アクティブ・セッション履歴レポートの生成

ASHレポートを使用すると、次の分析の実行が可能になります。

  • 通常数分間で収まる一時的なパフォーマンスの問題

  • 時間、セッション、モジュール、アクション、またはSQL識別子など、様々なディメンションやその組合せによる、指定範囲または特定のターゲットのパフォーマンス分析

ASHレポートは複数のセクションに分かれています。HTMLレポートには、セクション間ですばやくナビゲートできるようにリンクが組み込まれています。レポートの内容には、指定された期間の、ブロッカIDおよび待機中IDとその関連トランザクション識別子、およびSQL文の識別に使用されたASH情報が含まれています。

この項では、ASHレポートの生成方法を説明しており、内容は次のとおりです。

9.2.1 ASHレポートを生成するためのユーザー・インタフェース

ASHレポートを生成するためのプライマリ・インタフェースは、Oracle Enterprise Manager Cloud Control (Cloud Control)です。可能な場合は、Cloud Controlを使用してASHレポートを生成してください。

Cloud Controlを使用できない場合は、SQLスクリプトを実行してASHレポートを生成します。これらのスクリプトを実行するには、DBAロールが必要です。

関連項目:

Cloud Controlを使用したASHレポートの生成の詳細は、『Oracle Database 2日でパフォーマンス・チューニング・ガイド』を参照してください

9.2.2 コマンドライン・インタフェースを使用したASHレポートの生成

この項では、コマンドライン・インタフェースでSQLスクリプトを実行し、ASHレポートを生成する方法を説明します。

この項では、次の項目について説明します。

9.2.2.1 ローカル・データベース・インスタンスのASHレポートの生成

ashrpt.sql SQLスクリプトでは、ローカル・データベース・インスタンスの指定された期間のASH情報を表示する、HTMLまたはテキストのレポートが生成されます。

コマンドライン・インタフェースを使用して、ローカル・データベース・インスタンスにASHレポートを生成するには、次のようにします。

  1. SQLプロンプトで次のように入力します。

    @$ORACLE_HOME/rdbms/admin/ashrpt.sql
    
  2. レポートの形式としてHTMLまたはテキストのいずれかを指定します。

    Enter value for report_type: text
    

    この例では、テキスト形式のレポートが選択されます。

  3. システム日付より前の開始時間を分単位で指定します。

    Enter value for begin_time: -10
    

    この例では、現在の時刻より10分前が選択されます。

  4. 開始時間からASH情報を取得する期間を分単位で指定します。

    Enter value for duration:
    

    この例では、システム日付から開始時間をマイナスしたデフォルトの期間が使用されます。

  5. レポート名を入力するか、デフォルトのレポート名を受け入れます。

    Enter value for report_name: 
    Using the report name ashrpt_1_0310_0131.txt
    

    この例では、デフォルト名が使用され、ashrpt_1_0310_0131というASHレポートが生成されます。このレポートでは、現在の時刻の10分前から開始され、現在の時刻で終了するASH情報が収集されます。

9.2.2.2 特定のデータベース・インスタンスのASHレポートの生成

ashrpti.sql SQLスクリプトでは、指定されたデータベースおよびインスタンスの指定された期間のASH情報を表示する、HTMLまたはテキストのレポートが生成されます。このスクリプトでは、ASHレポートの生成に使用されるデータベースおよびインスタンスを指定できます。

コマンドライン・インタフェースを使用して、特定のデータベース・インスタンスにASHレポートを生成するには、次のようにします。

  1. SQLプロンプトで次のように入力します。

    @$ORACLE_HOME/rdbms/admin/ashrpti.sql
    
  2. レポートの形式として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
    
  3. 次のようにデータベース識別子(dbid)およびインスタンス番号(inst_num)の値を入力します。

    Enter value for dbid: 3309173529
    Using 3309173529 for database id
    Enter value for inst_num: 1
    
  4. フィジカル・スタンバイ・インスタンスの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)が選択されています。

  5. システム日付より前の開始時間を分単位で指定します。

    Enter value for begin_time: -10
    

    この例では、現在の時刻より10分前が選択されます。

  6. 開始時間からASH情報を取得する期間を分単位で指定します。

    Enter value for duration:
    

    この例では、システム日付から開始時間をマイナスしたデフォルトの期間が使用されます。

  7. レポートの「アクティビティの経過(Activity Over Time)」セクションで使用する時間帯(秒数)を指定します。

    Enter value for slot_width: 
    

    この例では、デフォルト値を使用します。「アクティビティの経過(Activity Over Time)」セクションおよび時間帯の指定方法の詳細は、「アクティビティの経過(Activity Over Time)」を参照してください。

  8. 後続のプロンプトの手順に従って、次のレポート・ターゲットの値を入力します。

    • target_session_id

    • target_sql_id

    • target_wait_class

    • target_service_hash

    • target_module_name

    • target_action_name

    • target_client_id

    • target_plsql_entry

  9. レポート名を入力するか、デフォルトのレポート名を受け入れます。

    Enter value for report_name: 
    Using the report name ashrpt_1_0310_0131.txt
    

    この例では、デフォルト名が使用され、ashrpt_1_0310_0131というASHレポートが生成されます。このレポートでは、3309173529というデータベースIDを持つデータベース・インスタンスにおいて、現在の時刻の10分前から開始され、現在の時刻で終了するASH情報が収集されます。

9.2.2.3 Oracle RAC ASHレポートの生成

ashrpti.sql SQLスクリプトは、Oracle Real Application Clusters (Oracle RAC)環境の指定されたデータベースおよびインスタンスにおける指定された期間のASH情報を表示する、HTMLまたはテキストのレポートを生成します。ディスクに書き込まれるASHデータのみがレポートの生成に使用されます。このレポートでは、DBA_HIST_ACTIVE_SESS_HISTORY表にある最後の10分間でのASHサンプルのみが使用されます。

Oracle RAC ASHレポートを生成するには、次のようにします。

  1. SQLプロンプトで次のように入力します。

    @$ORACLE_HOME/rdbms/admin/ashrpti.sql
    
  2. レポートの形式として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
    
  3. 次のようにデータベース識別子(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
    
  4. システム日付より前の開始時間を分単位で指定します。

    Enter value for begin_time: -1:10
    

    この例では、現在の時刻より1時間10分前が選択されます。

  5. 開始時間からASH情報を取得する期間を分単位で指定します。

    Enter value for duration: 10
    

    この例では、期間は10分間に設定されます。

  6. レポートの「アクティビティの経過(Activity Over Time)」セクションで使用する時間帯(秒数)を指定します。

    Enter value for slot_width: 
    

    この例では、デフォルト値を使用します。「アクティビティの経過(Activity Over Time)」セクションおよび時間帯の指定方法の詳細は、「アクティビティの経過(Activity Over Time)」を参照してください。

  7. 後続のプロンプトの手順に従って、次のレポート・ターゲットの値を入力します。

    • target_session_id

    • target_sql_id

    • target_wait_class

    • target_service_hash

    • target_module_name

    • target_action_name

    • target_client_id

    • target_plsql_entry

  8. レポート名を入力するか、デフォルトのレポート名を受け入れます。

    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情報が収集されます。

9.3 アクティブ・セッション履歴レポートの結果の解釈

ASHレポートを生成したら、その内容を確認して一時的なパフォーマンス問題の可能性のある原因を特定します。

ASHレポートの内容は、次のセクションに分けられます。

関連項目:

Oracle Real Application Clusters(Oracle RAC)に固有のASHレポートのセクションの詳細は、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。

9.3.1 上位のイベント

「上位イベント(Top Events)」セクションは、ユーザー、バックグラウンドおよび優先順位で分類されたサンプル・セッション・アクティビティの上位待機イベントを示します。このセクションの情報を使用して、一時的なパフォーマンス問題の原因となっている可能性のある待機イベントを特定します。

「上位イベント(Top Events)」セクションには、次のサブセクションが含まれます。

9.3.1.1 上位ユーザー・イベント

「Top User Events」サブセクションはサンプリングされたセッション・アクティビティの最も高い割合を占める、ユーザー・プロセスから上位の待機イベントをリストします。

9.3.1.2 上位バックグラウンド・イベント

「Top Background Events」サブセクションはサンプリングされたセッション・アクティビティの最も高い割合を占めるバックグラウンドからの上位の待機イベントをリストします。

9.3.1.3 上位イベントP1/P2/P3

「上位イベント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)」の各列に表示される待機イベント・パラメータに対応します。

9.3.2 ロード・プロファイル

「ロード・プロファイル(Load Profile)」セクションは、サンプル・セッション・アクティビティで分析された負荷を示します。このセクションの情報を使用して、一時的なパフォーマンス問題の原因となっている可能性のあるサービス、クライアントまたはSQLコマンド・タイプを特定します。

「ロード・プロファイル(Load Profile)」セクションには、次のサブセクションが含まれます。

9.3.2.1 上位サービス/モジュール

「上位サービス/モジュール」セクションには、サンプリングされたセッション・アクティビティの最も高い割合を占めるサービスおよびモジュールがリストされます。

9.3.2.2 上位クライアントID

「Top Client IDs」サブセクションに、クライアントIDに基づいてサンプリングされたセッション・アクティビティの最も高い割合を占めるクライアントがリストされます。クライアントIDはデータベース・セッションのアプリケーション固有の識別子です。

9.3.2.3 上位SQLのコマンド・タイプ

上位SQLのコマンド・タイプ・サブセクションには、サンプリングされたセッション・アクティビティの最も高い割合を占めるSQLコマンド・タイプ(SELECTまたはUPDATEコマンド)がリストされます。

9.3.2.4 上位実行フェーズ

上位実行フェーズ・サブセクションには、サンプリングされたセッション・アクティビティの最も高い割合を占めている実行のフェーズ(SQL、PL/SQLおよびJavaのコンパイルや実行など)がリストされます。

9.3.3 上位SQL

「上位SQL」セクションではサンプリングされたセッション・アクティビティの上位SQL文を説明します。この情報を使用して、一時的なパフォーマンス問題の原因となっている可能性のある高負荷のSQL文を特定します。

「上位SQL(Top SQL)」セクションには、次のサブセクションが含まれます。

9.3.3.1 上位SQLと上位イベント(Top SQL with Top Events)

「上位SQLと上位イベント(Top SQL with Top Events)」サブセクションは、サンプル・セッション・アクティビティで最高の割合を占めるSQL文と、それらのSQL文に対して発生した上位待機イベントを示します。「実行のサンプリング数」列に、特定のSQL文ごとに実行のサンプリング数が表示されます。

9.3.3.2 上位SQLと上位行ソース(Top SQL with Top Row Sources)

「上位SQLと上位行ソース(Top SQL with Top Row Sources)」サブセクションは、サンプル・セッション・アクティビティで最高の割合を占めるSQL文と、それらの詳細な実行計画情報を示します。この情報を使用することで、SQLの経過時間に多くの影響を与えているSQL実行部分を特定できます。

9.3.3.3 リテラルを使用する上位SQL(Top SQL Using Literals)

「リテラルを使用する上位SQL(Top SQL Using Literals)」サブセクションは、サンプル・セッション・アクティビティで最高の割合を占めるリテラルを使用するSQL文を示します。このレポートにリストされた文を確認して、リテラルをバインド変数に置換できるかどうかを決定する必要があります。

9.3.3.4 上位解析モジュール/アクション(Top Parsing Module/Action)

「上位解析モジュール/アクション(Top Parsing Module/Action)」サブセクションは、サンプル・セッション・アクティビティで最高の割合を占めるSQL文解析時のモジュールおよびアクションを示します。

9.3.3.5 SQLテキストの完全なリスト(Complete List of SQL Text)

SQLテキストの完全なリスト・サブセクションには、「上位SQL」セクションに表示されたSQL文のテキスト全体が表示されます。

9.3.4 上位PL/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実行にかかった時間の割合が示されます。

9.3.5 上位Java

「上位Java(Top Java)」セクションは、サンプル・セッション・アクティビティの上位Javaプログラムを示します。

9.3.6 上位セッション

「上位セッション(Top Sessions)」セクションは、特定の待機イベントを待機していたセッションを示します。この情報を使用して、一時的なパフォーマンス問題の原因となっている可能性のある、サンプリングされたセッション・アクティビティの最も高い割合を占めるセッションを特定します。

「上位セッション(Top Sessions)」セクションには、次のサブセクションが含まれます。

9.3.6.1 上位セッション

「上位セッション(Top Sessions)」サブセクションは、サンプル・セッション・アクティビティで最高の割合を占める特定の待機イベントを待機していたセッションを示します。

9.3.6.2 上位のブロック・セッション

「上位のブロック・セッション(Top Blocking Sessions)」サブセクションは、サンプル・セッション・アクティビティで最高の割合を占めるブロック・セッションを示します。

9.3.6.3 PQを実行している上位セッション(Top Sessions Running PQs)

「PQを実行している上位セッション(Top Sessions Running PQs)」サブセクションは、サンプル・セッション・アクティビティで最高の割合を占める、特定の待機イベントを待機していたパラレル問合せ(PQ)を実行中のセッションを示します。

9.3.7 上位オブジェクト/ファイル/ラッチ(Top Objects/Files/Latches)

「上位オブジェクト/ファイル/ラッチ(Top Objects/Files/Latches)」セクションは、最もよく使用されるデータベース・リソースに関する追加情報を示し、次のサブセクションを含みます。

9.3.7.1 上位DBオブジェクト

「上位DBオブジェクト(Top DB Objects)」サブセクションは、サンプル・セッション・アクティビティで最高の割合を占めるデータベース・オブジェクト(表や索引など)を示します。

9.3.7.2 上位DBファイル

「上位DBファイル(Top DB Files)」サブセクションは、サンプル・セッション・アクティビティで最高の割合を占めるデータベース・ファイルを示します。

9.3.7.3 上位ラッチ

「上位ラッチ(Top Latches)」サブセクションは、サンプル・セッション・アクティビティで最高の割合を占めるラッチを示します。

ラッチは、単純で低レベルなシリアライズ・メカニズムで、システム・グローバル領域(SGA)の共有データ構造の保護に使用されます。たとえば、ラッチにより、データベースに現在アクセスしているユーザーのリストと、バッファ・キャッシュのブロックを記述するデータ構造が保護されます。サーバーまたはバックグラウンド・プロセスは、これらの構造の操作または調査時に、ごく短時間ラッチを取得します。ラッチの実装は、特に、プロセスがラッチを待機するかどうかとその待機時間に関して、オペレーティング・システムに依存します。

9.3.8 アクティビティの経過

「アクティビティの経過(Activity Over Time)」セクションは、ASHレポートの中で最も有益な情報の含まれるセクションの1つです。このセクションには、分析期間中のアクティビティおよびワークロード・プロファイルに関する詳細な情報が含まれるため、長い期間分析する場合に特に役立ちます。

「アクティビティの経過(Activity Over Time)」セクションは、10個の時間帯に分けられます。各時間帯のサイズは、分析期間の継続時間に基づいて変化します。通常、最初と最後の時間帯は、余り部分になります。その内側の時間帯は、すべて同じサイズで、相互に比較できます。たとえば、分析期間が10分間続くと、すべての時間帯がそれぞれ1分となります。ただし、分析期間が9分30秒続くと、両端の時間帯はそれぞれ15秒となり、内側の時間帯はそれぞれ1分となります。

表9-1に示すとおり、各時間帯にはその特定の時間帯に関する情報が含まれます。

表9-1 アクティビティの経過

説明

時間帯(期間) (Slot Time (Duration))

時間帯の継続時間

時間帯の数(Slot Count)

時間帯のサンプル・セッションの数

イベント(Event)

時間帯の上位3つの待機イベント

イベント数(Event Count)

待機イベントを待機しているASHサンプルの数

イベントの割合(% Event)

分析期間全体で待機イベントを待機しているASHサンプルの割合

内側の時間帯を比較する場合、「イベント数(Event Count)」列と「時間帯の数(Slot Count)」列のスパイクを識別して、スキュー解析を実行します。「イベント数(Event Count)」列のスパイクは、特定のイベントを待機しているサンプル・セッションの数の増大を示します。「時間帯の数(Slot Count)」列のスパイクは、アクティブ・セッションの増大(ASHデータはアクティブ・セッションからのみサンプリングされるため)と、データベース・ワークロードの相対的な増大を示します。通常、アクティブ・セッションのサンプルの数と、待機イベントに関連付けられたセッションの数が増えた場合、スロットは一時的なパフォーマンス問題の原因となる可能性があります。

ユーザー定義の時間帯サイズでASHレポートを生成するには、「特定のデータベース・インスタンスのASHレポートの生成」の手順に従ってashrpti.sqlスクリプトを実行します。