変更後のSQLのパフォーマンス・データが構築されたら、変更前バージョンと変更後バージョンのパフォーマンス・データを比較できます。DBMS_SQLPA.EXECUTE_ANALYSIS_TASKプロシージャまたはファンクションを使用して、比較分析を実行します。
変更前と変更後のSQLパフォーマンス・データを比較するには、次の手順を実行します。
次のパラメータを使用して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_time、buffer_gets、disk_reads、direct_writes、optimizer_costおよびio_interconnect_bytesの各メトリックまたはこれらの組合せです。
比較用に設定可能なその他のパラメータについては、『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'));
次のパラメータを使用して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およびACTIVEです。
アクティブ・レポートには、インタラクティブなユーザー・インタフェースを使用するきめ細かなレポート機能が用意されており、データベースやOracle Enterprise Managerに接続されていないときでも詳細な分析を実行できます。可能なかぎり、HTMLレポートやテキスト・レポートのかわりにアクティブ・レポートを使用することをお薦めします。
アクティブ・レポートの詳細は、「SQLパフォーマンス・アナライザのアクティブ・レポートについて」を参照してください。
levelパラメータを設定して、推奨事項の形式を指定します。指定可能な値は、TYPICAL(デフォルト)、ALL、BASIC、CHANGED、CHANGED_PLANS、ERRORS、IMPROVED、REGRESSED、TIMEOUT、UNCHANGED、UNCHANGED_PLANSおよびUNSUPPORTEDです。
sectionパラメータを設定して、レポートに生成する特定のセクションを指定します。指定可能な値は、SUMMARY(デフォルト)およびALLです。
top_sqlパラメータを設定して、レポートに生成するSQLチューニング・セット内のSQL文の数を指定します。デフォルトでは、システム変更によって影響を受ける上位100のSQL文がレポートに示されます。
アクティブ・レポートを生成するには、次のスクリプトを実行します。
set trimspool on
set trim on
set pages 0
set linesize 1000
set long 1000000
set longchunksize 1000000
spool spa_active.html
SELECT DBMS_SQLPA.REPORT_ANALYSIS_TASK(task_name => 'my_spa_task',
type => 'active', section => 'all') FROM dual;
spool off
次に、比較サマリー・レポートをテキスト形式で作成し表示するための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
「コマンドラインを使用したSQLパフォーマンス・アナライザ・レポートの確認」で説明されているSQLパフォーマンス・アナライザ・レポートを確認してください。
関連項目:
DBMS_SQLPA.EXECUTE_ANALYSIS_TASKおよびDBMS_SQLPA.REPORT_ANALYSIS_TASKファンクションについては、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。