ヘッダーをスキップ
Oracle Database Real Application Testingユーザーズ・ガイド
11gリリース1(11.1)
B51856-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

11 SQL試行の比較

変更後のSQLのパフォーマンス・データが構築されたら、SQLパフォーマンス・アナライザを使用した比較分析を実行して、変更前と変更後のSQL試行で収集されたパフォーマンス・データを比較できます。 比較分析が完了したら、レポートを生成して、システム変更後にパフォーマンスが改善されたSQL文、パフォーマンスの変更がなかったSQL文またはパフォーマンスが低下したSQL文を特定できます。 詳細は、「パフォーマンス測定値の比較」を参照してください。

この章では、変更前と変更後のSQL試行のパフォーマンス・データを比較して分析する方法について説明します。内容は次のとおりです。


注意:

SQL試行を比較するための主要インタフェースは、Oracle Enterprise Managerです。 なんらかの理由でOracle Enterprise Managerを使用できない場合は、DBMS_SQLPA PL/SQLパッケージを使用してSQL試行を比較できます。


ヒント:

SQL試行を比較する前に、変更後のSQL試行を作成する必要があります。詳細は、第10章「変更後のSQL試行の作成」を参照してください。

Oracle Enterprise Managerを使用したSQL試行の比較

Oracle Enterprise Managerを使用してSQL試行を比較するには、次の手順を実行します。

Oracle Enterprise Managerを使用したSQLパフォーマンスの分析

Oracle Enterprise Managerを使用してシステム変更の前後にSQLパフォーマンスを分析するには、次の手順を実行します。

  1. 「ガイド付きワークフロー」ページで、「ステップ2とステップ3を比較」の「実行」アイコンをクリックします。

    「SQL試行比較の実行」ページが表示されます。

    spa_run_trial_compare.gifの説明が続きます。
    spa_run_trial_compare.gifの説明

    この例では、SQL_TRIAL_1207494888380試行およびSQL_TRIAL_1207499034916試行が比較用に選択されています。

  2. デフォルトで示されている試行以外の試行を比較するには、「試行1の名前」リストおよび「試行2の名前」リストで目的の試行を選択します。

    統計試行は実行計画のみをテストする試行とは比較できないことに注意してください。

  3. 「比較メトリック」リストで、比較分析に使用する比較メトリックを選択します。

    • 「経過時間」

    • 「CPU時間」

    • 「バッファ読取り」

    • 「ディスク読取り」

    • 「ダイレクト書込み」

    • 「オプティマイザ・コスト」

    SQL試行で実行計画のみを生成した場合に選択可能な比較メトリックは「オプティマイザ・コスト」のみです。

    複数の比較メトリックを使用して比較分析を実行するには、異なるメトリックを使用してこの手順を繰り返すことによって比較分析を別々に実行します。

  4. 「スケジュール」セクションで、次の手順を実行します。

    1. 「タイムゾーン」リストで、タイムゾーン・コードを選択します。

    2. 「即時」(即時にタスクを開始する場合)または、「後で」(「日付」および「時間」フィールドで指定した時間にタスクを開始するようスケジュールする場合)を選択します。

  5. 「発行」をクリックします。

    比較分析が開始されると、「ガイド付きワークフロー」ページが表示されます。

    比較分析中、この手順のステータス・アイコンは矢印アイコンに変わります。 ステータス・アイコンをリフレッシュするには、「リフレッシュ」をクリックします。 変更前および変更後の実行から収集したパフォーマンス・データの量によっては、比較分析が完了するまで時間がかかる場合があります。 比較分析が完了したら、「ステータス」アイコンがチェック・マークに変わり、次の手順の「実行」アイコンが有効になります。

  6. SQLパフォーマンス・アナライザによって変更前および変更後のパフォーマンス・データが分析されると、さらに詳細な分析に使用可能なSQLパフォーマンス・アナライザ・レポートが生成されます。詳細は、「Oracle Enterprise Managerを使用したSQLパフォーマンス・アナライザ・レポートの確認」を参照してください。

Oracle Enterprise Managerを使用したSQLパフォーマンス・アナライザ・レポートの確認

SQLパフォーマンス・アナライザのタスクが完了すると、変更前と変更後のSQLパフォーマンスを比較するSQLパフォーマンス・アナライザ・レポートに結果のデータが生成されます。

図11-1に、SQLパフォーマンス・アナライザ・レポートのサンプルを示します。 このサンプル・レポートでは、経過時間比較メトリックを使用して、変更前と変更後のSQLワークロードの実行を比較します。

図11-1 SQLパフォーマンス・アナライザ・レポート

図11-1の説明が続きます。
「図11-1 SQLパフォーマンス・アナライザ・レポート」の説明


ヒント:

SQLパフォーマンス・アナライザ・レポートを確認する前に、変更前と変更後のバージョンのパフォーマンス・データを比較します。詳細は、「Oracle Enterprise Managerを使用したSQL試行の比較」を参照してください。

SQLパフォーマンス・アナライザ・レポートを生成および確認するには、次の手順を実行します。

  1. 「ガイド付きワークフロー」ページで、「試行比較レポートの表示」の「実行」アイコンをクリックします。

    「SQLパフォーマンス・アナライザのタスク結果」ページが表示されます。

  2. パフォーマンス分析に関する一般情報を確認します。詳細は、「SQLパフォーマンス・アナライザ・レポートの確認: 一般情報」を参照してください。

  3. グローバル統計を確認します。「パフォーマンス・アナライザ・レポートの確認: グローバル統計」を参照してください。

  4. オプションで、詳細な統計を確認します。詳細は、「パフォーマンス・アナライザ・レポートの確認: グローバル統計の詳細」を参照してください。

SQLパフォーマンス・アナライザ・レポートの確認: 一般情報

「一般情報」セクションには、SQLパフォーマンス・アナライザによって実行されたワークロードの比較に関する基本情報およびメタデータが含まれています。

一般情報を確認するには、次の手順を実行します。

  1. 「SQLパフォーマンス・アナライザのタスク結果」ページで、次の情報が含まれている、ページ上部のサマリーを確認します。

    spa_task_result_info.gifの説明が続きます。
    spa_task_result_info.gifの説明

    このサマリーには次の情報が含まれています。

    • SQL パフォーマンス・アナライザのタスクの名前、所有者および説明

    • SQLチューニング・セットの名前および所有者

    • チューニング・セット内のSQL文の合計数および失敗する文の数

    • SQL試行および使用される比較メトリックの名前

  2. オプションで、「SQLチューニング・セット名」の横にあるリンクをクリックします。

    「SQLチューニング・セット」ページが表示されます。

    このページには、SQLチューニング・セット内のすべてのSQL文に関する情報(SQL IDやSQLテキストなど)が含まれています。

  3. エラーが検出された場合、「エラーのあるSQL文」の横にあるリンクをクリックします。

    「SQLパフォーマンス・アナライザのタスク結果」ページが表示されます。

    エラー表には、特定のSQLワークロードの実行中に発生したすべてのエラーがレポートされます。 エラーは、SQLチューニング・セット内のすべてのSQLの実行に共通する場合はSQLチューニング・セット・レベル、SQL文または実行計画に固有の場合は実行レベルでレポートされます。

  4. グローバル統計を確認します。詳細は、「パフォーマンス・アナライザ・レポートの確認: グローバル統計」を参照してください。

SQLパフォーマンス・アナライザ・レポートの確認: グローバル統計

「グローバル統計」セクションでは、SQLワークロードの全体的なパフォーマンスを示す統計がレポートされます。 このセクションは、SQLパフォーマンス・アナライザによる分析の非常に重要な部分を占めます。このセクションでは、SQLワークロードの全体的なパフォーマンスに対するシステム変更の影響がレポートされるためです。 このセクションの情報を使用して、ワークロードのパフォーマンスの傾向を理解し、システム変更によるワークロードのパフォーマンスへの影響を判断します。

グローバル統計を確認するには、次の手順を実行します。

  1. 「予測されるワークロードの経過時間」サブセクション内のグラフを確認します。

    グラフでは、X軸に2つの試行、Y軸に経過時間(秒)が示されます。

    spa_task_result_elapsed.gifの説明が続きます。
    spa_task_result_elapsed.gifの説明

    最も重要な統計は全体的な影響で、パーセントで示されます。 全体的な影響は、改善の影響と低下の影響の差になります。 すべての影響統計のリンクをクリックして、詳細を表示できます。詳細は、「パフォーマンス・アナライザ・レポートの確認: グローバル統計の詳細」を参照してください。

    この例では、改善の影響が44%、低下の影響が-6%であるため、システム変更の全体的な影響は約37%の改善となります。

  2. 「SQL文の数」サブセクション内のグラフを確認します。

    グラフのX軸には、システム変更後にパフォーマンスが改善されたSQL文、パフォーマンスが低下したSQL文またはパフォーマンスの変更がなかったSQL文の数が示されます。 Y軸には、SQL文の数が示されます。 また、グラフには、SQL文に対して実行計画が変更されたかどうかも示されます。

    spa_task_result_sqlcount.gifの説明が続きます。
    spa_task_result_sqlcount.gifの説明

    このグラフによって、SQL文の相対的なパフォーマンスを迅速に比較できます。 グラフ内の棒をクリックすると、詳細を確認できます。詳細は、「パフォーマンス・アナライザ・レポートの確認: グローバル統計の詳細」を参照してください。

    この例では、システム変更後にすべてのSQL文で変更がありません。

SQLパフォーマンス・アナライザ・レポートの確認: グローバル統計の詳細

SQLパフォーマンス・アナライザ・レポートを使用して、SQLワークロードの比較の詳細な統計を取得できます。 詳細なグラフによって、レポートに表示されるSQL文のパフォーマンスにドリルダウンできます。 このセクションの情報を使用して、特定のSQL文のパフォーマンスが低下した原因を調査します。

グローバル統計の詳細を確認するには、次の手順を実行します。

  1. 「予測されるワークロードの経過時間 」サブセクションで、詳細を確認するSQL文の影響のパーセントをクリックします。 SQL文の詳細を確認するには、パフォーマンスの状態に応じて次の操作を実行します。

    • 改善された場合は、「改善の影響」のパーセントをクリックします。

    • 低下した場合は、「低下の影響」のパーセントをクリックします。

    • 改善されたか、または低下した場合は、「全体の影響」のパーセントをクリックします。

    詳細な統計を含む表が表示されます。 選択したSQL文のタイプに応じて、次の列が含まれます。

    • 「SQL ID」

      この列には、SQL文のIDが示されます。

    • 「ワークロードに対する最終的な影響(%)」

      この列には、SQLワークロードのパフォーマンスに対するシステム変更による影響が示されます。

    • 「経過時間」

      この列には、SQL文の実行にかかる合計時間(秒)が示されます。

    • 「SQLに対する最終的な影響(%)」

      この列には、特定のSQL文のパフォーマンスに対する変更による局所的な影響が示されます。

    • 「ワークロードの%」

      この列には、このSQL文で使用される合計ワークロードのパーセントが示されます。

    • 「変更済の計画」

      この列には、SQLの実行計画が変更されたかどうかが示されます。

  2. 特定のSQL文の詳細を表示するには、対象のSQL文の「SQL ID」リンクをクリックします。

    「SQLの詳細」ページが表示されます。

    このページを使用して、SQLテキストにアクセスし、SQL文に関する低レベルの詳細(CPU時間、バッファ取得、オプティマイザ・コストなど)を取得できます。

Oracle Enterprise Managerを使用した、パフォーマンスが低下したSQL文のチューニング

SQLパフォーマンス・アナライザのタスクを確認したら、SQLパフォーマンスの比較後に特定されるパフォーマンスが低下したSQL文をチューニングする必要があります。 パフォーマンスが低下したSQL文が多数表示される場合は、根本原因を特定し、システム・レベルの変更を行って問題を修正する必要があります。 パフォーマンスが低下したSQL文が少数の場合は、次のいずれかのチューニング方法を使用して、部分的な解決を行うことを検討してください。

パフォーマンスが低下したSQL文をチューニングしたら、SQLパフォーマンス・アナライザを使用して、それらの変更をテストする必要があります。 新しいSQL試行をテスト・システムで実行すると、2番目の比較(新しいSQL試行と最初の試行の比較)が実行され、結果が検証されます。 SQLパフォーマンス・アナライザにパフォーマンスが安定していることが示されたら、テストは完了します。 この手順での修正を本番システムに実装してください。

SQL計画ベースラインの作成

SQL計画ベースラインを作成すると、オプティマイザでより適切な実行計画が使用され、パフォーマンスの低下を回避できます。

SQL計画ベースラインを作成するには、次の手順を実行します。

  1. 「SQLパフォーマンス・アナライザのタスク結果」ページの「推奨」で、「SQL計画ベースラインの作成」をクリックします。

    「SQL計画ベースラインの作成」ページが表示されます。 「低下したSQL文」セクションに、新しいSQL計画ベースラインに関連付けるパフォーマンスが低下したSQL文が示されます。

    create_sql_plan_baselines.gifの説明が続きます。
    create_sql_plan_baselines.gifの説明

  2. 「ジョブ・パラメータ」で、次のようにジョブのパラメータを指定します。

    1. 「ジョブ名」フィールドに、ジョブの名前を入力します。

    2. 「説明」フィールドに、オプションでジョブの説明を入力します。

  3. 「スケジュール」で、次の項目を選択します。

    • 即時: ジョブを即時開始します。

    • 後で: 「タイムゾーン」、「日付」および「時間」フィールドを使用して指定した時間に開始するようにジョブをスケジュールします。

  4. 「OK」をクリックします。

    「SQLパフォーマンス・アナライザのタスク結果」ページが表示されます。 ジョブが正常に実行されたことを示すメッセージが表示されます。


参照:

  • SQL計画ベースラインの作成および管理については、『Oracle Database 2日でパフォーマンス・チューニング・ガイド』を参照してください。


SQLチューニング・アドバイザの実行

SQLチューニング・アドバイザを実行すると、パフォーマンスの低下を回避できる可能性がある代替実行計画が検索されます。

SQLチューニング・アドバイザを実行するには、次の手順を実行します。

  1. 「SQLパフォーマンス・アナライザのタスク結果」ページの「推奨」で、「SQLチューニング・アドバイザの実行」をクリックします。

    「SQLチューニング・タスクのスケジュール」ページが表示されます。

    schedule_sql_tuning.gifの説明が続きます。
    schedule_sql_tuning.gifの説明

  2. 「チューニング・タスク名」フィールドに、SQLチューニング・タスクの名前を入力します。

  3. 「チューニング・タスクの説明」フィールドに、オプションでSQLチューニング・タスクの説明を入力します。

  4. 「スケジュール」で、次の項目を選択します。

    • 即時: ジョブを即時開始します。

    • 後で: 「タイムゾーン」、「日付」および「時間」フィールドを使用して指定した時間に開始するようにジョブをスケジュールします。

  5. 「OK」をクリックします。

    「SQLパフォーマンス・アナライザのタスク結果」ページが表示されます。 SQLチューニング・レポートへのリンクが「推奨」の下に表示されます。

  6. SQLチューニング・レポートを表示するには、「SQLチューニング・レポート」リンクをクリックします。

    「SQLチューニング結果」ページが表示されます。


参照:

  • SQLチューニング・アドバイザの実行については、『Oracle Database 2日でパフォーマンス・チューニング・ガイド』を参照してください。


APIを使用したSQL試行の比較

APIを使用してSQL試行を比較するには、次の手順を実行します。

APIを使用したSQLパフォーマンスの分析

変更後のSQLのパフォーマンス・データが構築されたら、変更前バージョンと変更後バージョンのパフォーマンス・データを比較できます。 DBMS_SQLPA.EXECUTE_ANALYSIS_TASKプロシージャまたはファンクションを使用して、比較分析を実行します。

変更前と変更後のSQLパフォーマンス・データを比較するには、次の手順を実行します。

  1. 次のパラメータを使用して、EXECUTE_ANALYSIS_TASKプロシージャまたはファンクションをコールします。

    • task_nameパラメータをSQLパフォーマンス・アナライザのタスクの名前に設定します。

    • execution_typeパラメータをCOMPARE PERFORMANCEに設定します。 この設定によって、2つのバージョンのSQLパフォーマンス・データが分析および比較されます。

    • execution_nameパラメータを使用して、実行を識別するための名前を指定します。 指定しない場合は、SQLパフォーマンス・アナライザによって名前が生成され、ファンクションによって戻されます。

    • execution_paramsパラメータを使用して、2つのバージョンのSQLパフォーマンス・データを指定します。 execution_paramsパラメータは、指定した実行の名前/ペアとして指定されます。 SQLパフォーマンス・データの比較および分析に関連する実行パラメータを次のように設定します。

      • execution_name1パラメータを最初の実行(システム変更が実行される前)の名前に設定します。 この値は、「APIを使用した変更前のSQL試行の作成」で指定されているexecution_nameパラメータの値に対応している必要があります。

      • execution_name2パラメータを2番目の実行(システム変更が実行された後)の名前に設定します。 システム変更後にSQLワークロードを実行した場合、この値は「APIを使用した変更後のSQL試行の作成」で指定されているexecution_nameパラメータに対応している必要があります。 コール元が実行を指定しなかった場合、SQLパフォーマンス・アナライザではデフォルトで最後の2回のタスク実行が常に比較されます。

      • comparison_metricパラメータを設定して、パフォーマンスに対する影響の分析に使用する実行統計の式を指定します。 指定可能な値は、elapsed_time(デフォルト)、cpu_timebuffer_getsdisk_readsdirect_writesおよびoptimizer_costの各メトリックまたはこれらの組合せです。

      比較用に設定可能なその他のパラメータについては、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』のDBMS_SQLPAパッケージに関する項を参照してください。

    次の例は、ファンクション・コールを示しています。

    EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(task_name => 'my_spa_task', -
           execution_type => 'COMPARE PERFORMANCE', -
           execution_name => 'my_exec_compare', -
           execution_params => dbms_advisor.arglist(-
                                 'comparison_metric', 'buffer_gets'));
    
  2. 次のパラメータを使用して、DBMS_SQLPA.REPORT_ANALYSIS_TASKファンクションをコールします。

    • task_nameパラメータをSQLパフォーマンス・アナライザのタスクの名前に設定します。

    • execution_nameパラメータを、使用する実行の名前に設定します。 この値は、レポートの生成対象となる実行のexecution_nameパラメータと一致している必要があります。

      レポートを生成して結果を表示するには、次の操作を実行します。

      • SQLワークロードに対して生成された実行計画の場合は、目的のEXPLAIN PLAN実行のexecution_nameパラメータと一致するようにこの値を設定します。

      • SQLワークロードに対して生成された実行計画および実行統計の場合は、目的のTEST EXECUTE実行で使用されたexecution_nameパラメータの値と一致するようにこのパラメータを設定します。

      • 比較分析の場合は、目的のANALYZE PERFORMANCE実行のexecution_nameパラメータと一致するようにこの値を設定します。

      指定しなかった場合、SQLパフォーマンス・アナライザによって最後の実行に関するレポートが生成されます。

    • typeパラメータを設定して、生成するレポートのタイプを指定します。 指定可能な値は、TEXT(デフォルト)、HTMLおよびXMLです。

    • levelパラメータを設定して、推奨事項の形式を指定します。 指定可能な値は、TYPICAL(デフォルト)、BASICIMPROVEDREGRESSEDCHANGED_PLANSERRORSおよびALLです。

    • sectionパラメータを設定して、レポートに生成する特定のセクションを指定します。 指定可能な値は、SUMMARY(デフォルト)およびALLです。

    • top_sqlパラメータを設定して、レポートに生成するSQLチューニング・セット内のSQL文の数を指定します。 デフォルトでは、システム変更によって影響を受ける上位100のSQL文がレポートに示されます。

    次に、比較サマリー・レポートの作成および表示に使用できるSQLスクリプトの例の一部を示します。

    VAR rep   CLOB;
    EXEC :rep := DBMS_SQLPA.REPORT_ANALYSIS_TASK('my_spa_task', -
                    'text', 'typical', 'summary');
    SET LONG 100000 LONGCHUNKSIZE 100000 LINESIZE 130
    PRINT :rep
    
  3. SQLパフォーマンス・アナライザ・レポートを確認します。詳細は、「APIを使用したSQLパフォーマンス・アナライザ・レポートの確認」を参照してください。


参照:

  • DBMS_SQLPA.EXECUTE_ANALYSIS_TASKおよびDBMS_SQLPA.REPORT_ANALYSIS_TASKファンクションについては、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。


APIを使用したSQLパフォーマンス・アナライザ・レポートの確認

SQLパフォーマンス・アナライザ・レポートは、次のセクションに分類されます。

この項では、サンプル・レポートを使用して、SQLパフォーマンス・アナライザ・レポートを確認する方法について説明します。 このサンプル・レポートでは、buffer_getsを比較メトリックとして使用して、変更前と変更後のSQLワークロードの実行を比較します。

一般情報

一般情報セクションには、SQLパフォーマンス・アナライザのタスク、使用されたSQLチューニング・セット、変更前と変更後の実行に関する基本情報およびメタデータが含まれています。 例11-1に、サンプル・レポートの一般情報セクションを示します。

例11-1 一般情報

---------------------------------------------------------------------------------------------
General Information
---------------------------------------------------------------------------------------------

 Task Information:                              Workload Information:
 ---------------------------------------------  ---------------------------------------------
  Task Name    : my_spa_task                     SQL Tuning Set Name        : my_sts
  Task Owner   : APPS                            SQL Tuning Set Owner       : APPS
  Description  :                                 Total SQL Statement Count  : 101

Execution Information:
---------------------------------------------------------------------------------------------
  Execution Name  : my_exec_compare        Started             : 05/21/2007 11:30:09
  Execution Type  : ANALYZE PERFORMANCE    Last Updated        : 05/21/2007 11:30:10
  Description     :                        Global Time Limit   : UNLIMITED
  Scope           : COMPREHENSIVE          Per-SQL Time Limit  : UNUSED
  Status          : COMPLETED              Number of Errors    : 0

Analysis Information:
---------------------------------------------------------------------------------------------
 Comparison Metric: BUFFER_GETS
 ------------------
 Workload Impact Threshold: 1%
 --------------------------
 SQL Impact Threshold: 1%
 ----------------------
 Before Change Execution:                       After Change Execution:
 ---------------------------------------------  ---------------------------------------------
  Execution Name      : my_exec_BEFORE_change    Execution Name      : my_exec_AFTER_change
  Execution Type      : TEST EXECUTE             Execution Type      : TEST EXECUTE
  Description         :                          Description         :
  Scope               : COMPREHENSIVE            Scope               : COMPREHENSIVE
  Status              : COMPLETED                Status              : COMPLETED
  Started             : 05/21/2007 11:22:06      Started             : 05/21/2007 11:25:56
  Last Updated        : 05/21/2007 11:24:01      Last Updated        : 05/21/2007 11:28:30
  Global Time Limit   : 1800                     Global Time Limit   : 1800
  Per-SQL Time Limit  : UNUSED                   Per-SQL Time Limit  : UNUSED
  Number of Errors    : 0                        Number of Errors    : 0

---------------------------------------------------------------------------------------------

例11-1では、タスク名がmy_spa_taskであることがタスク情報セクションに示されています。 ワークロード情報セクションには、101のSQL文を含むSQLチューニング・セットmy_stsの実行がタスクによって比較されたことが示されています。 実行情報セクションには、比較実行名がmy_exec_compareであることが示されています。

分析情報セクションには、SQLパフォーマンス・アナライザによって、比較メトリックのbuffer_getsを使用してSQLチューニング・セットmy_stsの2つの実行(my_exec_BEFORE_changemy_exec_AFTER_change)が比較されたことが示されています。

結果のサマリー

結果のサマリー・セクションには、SQLパフォーマンス・アナライザのタスクの結果の概要が示されます。 結果のサマリー・セクションは、次のサブセクションに分類されます。

全体的なパフォーマンス統計

全体的なパフォーマンス統計サブセクションには、SQLワークロードの全体的なパフォーマンスに関する統計が表示されます。 このセクションは、SQLパフォーマンス・アナライザによる分析の非常に重要な部分を占めます。このセクションには、SQLワークロードの全体的なパフォーマンスに対するシステム変更の影響が示されるためです。 このセクションの情報を使用して、ワークロードのパフォーマンスの変化を理解し、ワークロードのパフォーマンスがシステム変更の実行後に改善されるか低下するかを判断します。

例11-2に、サンプル・レポートの全体的なパフォーマンス統計サブセクションを示します。

例11-2 全体的なパフォーマンス統計

Report Summary
---------------------------------------------------------------------------------------------

Projected Workload Change Impact:
-------------------------------------------
 Overall Impact      :   47.94%
 Improvement Impact  :   58.02%
 Regression Impact   :  -10.08%

SQL Statement Count
-------------------------------------------
 SQL Category  SQL Count  Plan Change Count
 Overall       101        6
 Improved      2          2
 Regressed     1          1
 Unchanged     98         3
.
.
.
---------------------------------------------------------------------------------------------

この例では、低下の影響が-10.08%であったにもかかわらず、SQLワークロードの全体的なパフォーマンスは47.94%改善されたことを示しています。 システム変更後、101のSQL文のうち2つは実行速度が速くなりましたが、1つは遅くなりました。 98のSQL文のパフォーマンスには変化がありませんでした。

SQL文のパフォーマンス統計

パフォーマンス統計サブセクションでは、システム変更によって最も影響を受けるSQL文が強調表示されます。 ワークロード内のSQL文ごとに、次の条件に基づいて変更前と変更後のパフォーマンス・データが比較されます。

  • 各SQL文の重み(重要性)

  • SQLワークロード全体に対する各SQL文へのシステム変更の影響

  • 各SQL文へのシステム変更の影響

  • 各SQL文の実行計画の構造が変更されたかどうか

例11-3に、サンプル・レポートのSQL文のパフォーマンス統計サブセクションを示します。 レポートは、ページに収まるように少し変更してあります。

例11-3 SQL文のパフォーマンス統計

SQL Statements Sorted by their Absolute Value of Change Impact on the Workload
--------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
|        |               | Impact | Metric  | Metric  | Impact | % Wrkld | % Wrkld | Plan   |
| obj_id | sql_id        | Wrkld  | Before  | After   | on SQL | Before  | After   | Change |
---------------------------------------------------------------------------------------------
| 205    | 73s2sgy2svfrw |  29.01%| 1681683 |  220590 | 86.88% |   33.39% |  8.42% |   y    |
| 206    | gq2a407mv2hsy |  29.01%| 1681683 |  220590 | 86.88% |   33.39% |  8.42% |   y    |
| 204    | 2wtgxbjz6u2by | -10.08%| 1653012 | 2160529 | -30.7% |   32.82% | 82.48% |   y    |
---------------------------------------------------------------------------------------------

これらのSQL文は、SQLワークロードに対する最終的な影響の絶対値で降順にソートされています。つまり、ソート順序は、影響の良し悪しとは関係がありません。

エラー

エラー・サブセクションには、実行中に発生したすべてのエラーがレポートされます。 エラーは、SQLチューニング・セット内のすべての実行に共通する場合はSQLチューニング・セット・レベル、SQL文または実行計画に固有の場合は実行レベルでレポートされます。

例11-4に、SQLパフォーマンス・アナライザ・レポートのエラー・サブセクションの例を示します。

例11-4 エラー

----------------------------------------------------------------------------------
                             SQL STATEMENTS WITH ERRORS
----------------------------------------------------------------------------------
SQL ID        Error
------------- --------------------------------------------------------------------
47bjmcdtw6htn ORA-00942: table or view does not exist
br61bjp4tnf7y ORA-00920: invalid relational operator
----------------------------------------------------------------------------------

結果の詳細

結果の詳細セクションでは、レポートの結果のサマリー・セクションに表示されるSQL文のパフォーマンスまでドリルダウンできます。 このセクションの情報を使用して、特定のSQL文のパフォーマンスが低下した原因を調査します。

このセクションには、SQLパフォーマンスの影響分析で処理されたすべてのSQL文のエントリが示されます。 各エントリは、次のサブセクションで構成されています。

SQLの詳細

レポートのこのセクションには、SQL文の概要(SQL文の情報および実行の詳細)が表示されます。

例11-5に、サンプル・レポートのSQLの詳細サブセクションを示します。

例11-5 SQLの詳細

SQL Details:
-----------------------------
 Object ID            : 204
 Schema Name          : APPS
 SQL ID               : 2wtgxbjz6u2by
 Execution Frequency  : 1
 SQL Text             : SELECT /* my_query_14_scott */ /*+ ORDERED INDEX(t1)
                        USE_HASH(t1) */ 'B' || t2.pg_featurevalue_05_id
                        pg_featurevalue_05_id, 'r' || t4.elementrange_id
                        pg_featurevalue_15_id, 'G' || t5.elementgroup_id
                        pg_featurevalue_01_id, 'r' || t6.elementrange_id . . .
.
.
.
---------------------------------------------------------------------------------------------

例11-5には、パフォーマンスが低下したSQL文(IDは2wtgxbjz6u2by、対応するオブジェクトIDは204)の概要が示されています。

単一実行統計

単一実行統計サブセクションでは、変更前と変更後の実行からのSQL文の実行統計が比較され、検出結果の概要が示されます。

例11-6に、サンプル・レポートの単一実行統計サブセクションを示します。

例11-6 単一実行統計

Execution Statistics:
-----------------------------
---------------------------------------------------------------------------------------
|              | Impact on | Value   | Value   | Impact     | % Workload | % Workload |
| Stat Name    | Workload  | Before  | After   | on SQL     | Before     | After      |
---------------------------------------------------------------------------------------
| elapsed_time |    -95.54%|  36.484 | 143.161 |   -292.39% |     32.68% |     94.73% |
| parse_time   |    -12.37%|    .004 |    .062 |     -1450% |       .85% |     11.79% |
| exec_elapsed |    -95.89%|   36.48 | 143.099 |   -292.27% |     32.81% |     95.02% |
| exec_cpu     |    -19.73%|  36.467 |  58.345 |    -59.99% |     32.89% |     88.58% |
| buffer_gets  |    -10.08%| 1653012 | 2160529 |     -30.7% |     32.82% |     82.48% |
| cost         |     12.17%|   11224 |    2771 |     75.31% |     16.16% |      4.66% |
| reads        |  -1825.72%|    4091 |  455280 | -11028.82% |     16.55% |     96.66% |
| writes       |     -1500%|       0 |      15 |     -1500% |         0% |       100% |
| rows         |           |     135 |     135 |            |            |            |
---------------------------------------------------------------------------------------

Findings (2):
-----------------------------
 1. The performance of this SQL has regressed.
 2. The structure of the SQL execution plan has changed.
---------------------------------------------------------------------------------------------
実行計画

実行計画サブセクションには、SQL文の変更前および変更後の実行計画が表示されます。 パフォーマンスが低下した場合、このセクションには、根本原因および兆候についての検出結果も表示されます。

例11-7に、サンプル・レポートの実行計画サブセクションを示します。

例11-7 実行計画

Execution Plan Before Change:
-----------------------------
 Plan Id          : 1
 Plan Hash Value  : 3412943215

----------------------------------------------------------------------------------------------------------
| Id   | Operation                           | Name                | Rows   | Bytes   | Cost  | Time     |
----------------------------------------------------------------------------------------------------------
|    0 | SELECT STATEMENT                    |                     |      1 |     126 | 11224 | 00:02:15 |
|    1 |   HASH GROUP BY                     |                     |      1 |     126 | 11224 | 00:02:15 |
|    2 |    NESTED LOOPS                     |                     |      1 |     126 | 11223 | 00:02:15 |
|  * 3 |     HASH JOIN                       |                     |      1 |     111 | 11175 | 00:02:15 |
|  * 4 |      TABLE ACCESS FULL              | LU_ELEMENTGROUP_REL |      1 |      11 |   162 | 00:00:02 |
|  * 5 |      HASH JOIN                      |                     |    487 |   48700 | 11012 | 00:02:13 |
|    6 |       MERGE JOIN                    |                     |     14 |     924 |  1068 | 00:00:13 |
|    7 |        SORT JOIN                    |                     |   5391 |  274941 |  1033 | 00:00:13 |
|  * 8 |         HASH JOIN                   |                     |   5391 |  274941 |   904 | 00:00:11 |
|  * 9 |          TABLE ACCESS FULL          | LU_ELEMENTGROUP_REL |    123 |    1353 |   175 | 00:00:03 |
| * 10 |          HASH JOIN                  |                     |   5352 |  214080 |   729 | 00:00:09 |
| * 11 |           TABLE ACCESS FULL         | LU_ITEM_293         |   5355 |  128520 |    56 | 00:00:01 |
| * 12 |           TABLE ACCESS FULL         | ADM_PG_FEATUREVALUE |   1629 |   26064 |   649 | 00:00:08 |
| * 13 |        FILTER                       |                     |        |         |       |          |
| * 14 |         SORT JOIN                   |                     |      1 |      15 |    36 | 00:00:01 |
| * 15 |          TABLE ACCESS FULL          | LU_ELEMENTRANGE_REL |      1 |      15 |    35 | 00:00:01 |
|   16 |       INLIST ITERATOR               |                     |        |         |       |          |
| * 17 |        TABLE ACCESS BY INDEX ROWID  | FACT_PD_OUT_ITM_293 | 191837 | 6522458 |  9927 | 00:02:00 |
|   18 |         BITMAP CONVERSION TO ROWIDS |                     |        |         |       |          |
| * 19 |          BITMAP INDEX SINGLE VALUE  | FACT_274_PER_IDX    |        |         |       |          |
| * 20 |     TABLE ACCESS FULL               | LU_ELEMENTRANGE_REL |      1 |      15 |    49 | 00:00:01 |
----------------------------------------------------------------------------------------------------------
.
.
.

Execution Plan After Change:
-----------------------------
 Plan Id          : 102
 Plan Hash Value  : 1923145679

------------------------------------------------------------------------------------------------------
| Id   | Operation                           | Name                | Rows | Bytes  | Cost | Time     |
------------------------------------------------------------------------------------------------------
|    0 | SELECT STATEMENT                    |                     |    1 |    126 | 2771 | 00:00:34 |
|    1 |   HASH GROUP BY                     |                     |    1 |    126 | 2771 | 00:00:34 |
|    2 |    NESTED LOOPS                     |                     |    1 |    126 | 2770 | 00:00:34 |
|  * 3 |     HASH JOIN                       |                     |    1 |    111 | 2722 | 00:00:33 |
|  * 4 |      HASH JOIN                      |                     |    1 |    100 | 2547 | 00:00:31 |
|  * 5 |       TABLE ACCESS FULL             | LU_ELEMENTGROUP_REL |    1 |     11 |  162 | 00:00:02 |
|    6 |       NESTED LOOPS                  |                     |      |        |      |          |
|    7 |        NESTED LOOPS                 |                     |  484 |  43076 | 2384 | 00:00:29 |
|  * 8 |         HASH JOIN                   |                     |   14 |    770 |  741 | 00:00:09 |
|    9 |          NESTED LOOPS               |                     |    4 |    124 |  683 | 00:00:09 |
| * 10 |           TABLE ACCESS FULL         | LU_ELEMENTRANGE_REL |    1 |     15 |   35 | 00:00:01 |
| * 11 |           TABLE ACCESS FULL         | ADM_PG_FEATUREVALUE |    4 |     64 |  649 | 00:00:08 |
| * 12 |          TABLE ACCESS FULL          | LU_ITEM_293         | 5355 | 128520 |   56 | 00:00:01 |
|   13 |         BITMAP CONVERSION TO ROWIDS |                     |      |        |      |          |
| * 14 |          BITMAP INDEX SINGLE VALUE  | FACT_274_ITEM_IDX   |      |        |      |          |
| * 15 |        TABLE ACCESS BY INDEX ROWID  | FACT_PD_OUT_ITM_293 |   36 |   1224 | 2384 | 00:00:29 |
| * 16 |      TABLE ACCESS FULL              | LU_ELEMENTGROUP_REL |  123 |   1353 |  175 | 00:00:03 |
| * 17 |     TABLE ACCESS FULL               | LU_ELEMENTRANGE_REL |    1 |     15 |   49 | 00:00:01 |
------------------------------------------------------------------------------------------------------

APIを使用した、パフォーマンスが低下したSQL文のチューニング

SQLパフォーマンス・アナライザのタスクを確認したら、SQLパフォーマンスの比較後に特定されるパフォーマンスが低下したSQL文をチューニングする必要があります。 パフォーマンスが低下したSQL文が多数表示される場合は、根本原因を特定し、システム・レベルの変更を行って問題を修正する必要があります。 パフォーマンスが低下したSQL文が少数の場合は、SQLチューニング・アドバイザまたはSQL計画ベースラインを使用して、部分的な解決を行うことを検討してください。

パフォーマンスが低下したSQL文をチューニングしたら、SQLパフォーマンス・アナライザを使用して、それらの変更をテストする必要があります。 新しいSQL試行をテスト・システムで実行すると、2番目の比較(新しいSQL試行と最初の試行の比較)が実行され、結果が検証されます。 SQLパフォーマンス・アナライザにパフォーマンスが安定していることが示されたら、テストは完了します。 この手順での修正を本番システムに実装してください。


参照:

  • SQLチューニング・アドバイザの使用については、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

  • SQL計画ベースラインの使用については、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。


SQLパフォーマンス・アナライザのビューの使用

次のビューを問い合せて、SQLパフォーマンス・アナライザを監視し、分析結果を表示することができます。


注意:

これらのビューで参照可能な情報は、SQLパフォーマンス・アナライザ・レポートにも含まれています。 かわりに、SQLパフォーマンス・アナライザ・レポートを使用して分析結果を表示することをお薦めします。 結果をより高度に分析する場合にのみこれらのビューを使用することを検討してください。

  • DBA_ADVISOR_TASKSおよびUSER_ADVISOR_TASKSビューには、作成されたSQLパフォーマンス・アナライザのタスクに関する記述情報が表示されます。

  • DBA_ADVISOR_EXECUTIONSおよびUSER_ADVISOR_EXECUTIONSビューには、タスク実行に関する情報が表示されます。 SQLパフォーマンス・アナライザでは、3つ以上の実行が作成され、SQLワークロードに対するデータベース変更によって発生するSQLパフォーマンスへの影響が分析されます。 最初の実行では、変更前バージョンのパフォーマンス・データが収集されます。 2番目の実行では、変更後バージョンのパフォーマンス・データが収集されます。 3番目の実行では、比較分析が実行されます。

  • DBA_ADVISOR_FINDINGSおよびUSER_ADVISOR_FINDINGSビューには、SQLパフォーマンス・アナライザの結果が表示されます。 SQLパフォーマンス・アナライザでは、次のタイプの結果が生成されます。

    • 問題(パフォーマンスの低下など)

    • 兆候(実行計画の構造が変化した場合など)

    • エラー(オブジェクトまたはビューが存在しない場合など)

    • 情報メッセージ(変更前バージョンの実行計画の構造がSQLチューニング・セットに格納されているものと異なる場合など)

  • DBA_ADVISOR_SQLPLANSおよびUSER_ADVISOR_SQLPLANSビューには、すべての実行計画のリストが表示されます。

  • DBA_ADVISOR_SQLSTATSおよびUSER_ADVISOR_SQLSTATSビューには、すべてのSQLコンパイルおよび実行統計のリストが表示されます。

  • V$ADVISOR_PROGRESSビューには、SQLパフォーマンス・アナライザの操作の進行状況が表示されます。 このビューを使用して、完了しているSQL文の数およびSQL試行で実行待機中のSQL文の数を監視します。

DBAビューにアクセスするには、SELECT_CATALOG_ROLEロールが必要です。


参照:

  • DBA_ADVISOR_TASKSDBA_ADVISOR_EXECUTIONSおよびDBA_ADVISOR_SQLPLANSビューについては、『Oracle Databaseリファレンス』を参照してください。