4 変更前のSQL試行の作成
注意:
SQL試行は、パブリック・データベース・リンクにアクセスすることで、リモート・システム上で実行することもできます。リモートのSQL試行を実行する場合は、SQL文が実行されるリモート・データベースのデータベース・バージョンが、その接続先のデータベースのデータベース・バージョン以下であることが必要です。Oracle Databaseリリース11.2.0.2以上では、Oracle Active Data Guardインスタンスなどの読取り専用データベースをリモート・データベースとして指定できます。
テスト・システムの環境が適切に構成されたら、変更前のバージョンのパフォーマンス・データを構築した後で、システム変更を実行できます。次のいずれかの方法で、SQLパフォーマンス・アナライザを使用してSQL試行を作成できます。
-
ワークロード内のSQL文の実行
-
ワークロード内のSQL文に対する実行計画の生成
-
SQLチューニング・セットからのパフォーマンス・データおよび実行計画のロード(APIのみ)
この章では、変更前のSQL試行の作成方法について説明します。内容は次のとおりです。
注意:
変更前のSQL試行を作成するための主要なインタフェースは、Oracle Enterprise Managerです。なんらかの理由でOracle Enterprise Managerを使用できない場合は、DBMS_SQLPA
PL/SQLパッケージを使用して変更前のSQL試行を作成できます。
4.1 Enterprise Managerを使用した変更前のSQL試行の作成
この項では、Oracle Enterprise Managerを使用して変更前のSQLパフォーマンス・データを収集する方法について説明します。
Enterprise Managerを使用して変更前のSQL試行を作成するには、次の手順を実行します。
-
「ガイド付きワークフロー」ページで、「初期環境へのSQL試行の作成」手順の「実行」アイコンをクリックします。
「SQL試行の作成」ページが表示されます。選択したSQLチューニング・セットのサマリー(SQLワークロードを含む)が表示されます。
-
「SQL試行名」フィールドに、SQL試行の名前を入力します。
-
「SQL試行の説明」フィールドに、SQL試行の説明を入力します。
-
「作成方法」リストで、次のいずれかのアクションを実行して、SQL試行の作成方法および生成されるコンテンツを確認します。
-
「SQLをローカルで実行」を選択します。
このSQL試行では、実際にテスト・システムでSQL文をローカルに実行することによって、SQLチューニング・セット内の各SQL文に対して実行計画と実行統計の両方が生成されます。
-
「SQLをリモートで実行」を選択します。
このSQL試行では、実際にパブリック・データベース・リンクを介して別のテスト・システムでSQL文をリモートに実行することによって、SQLチューニング・セット内の各SQL文に対して実行計画と実行統計の両方が生成されます。
-
「計画をローカルで実行」を選択します。
このSQL試行では、バインド値およびオプティマイザの構成が考慮された後に、オプティマイザが起動されて、テスト・システムにローカルに実行計画が作成されます。実際にSQL文が実行されることはありません。
-
「計画をリモートで実行」を選択します。
このSQL試行では、バインド値およびオプティマイザの構成が考慮された後に、オプティマイザが起動されて、パブリック・データベース・リンクを介してリモートで別のテスト・システムに実行計画が作成されます。実際にSQL文が実行されることはありません。
-
「SQLチューニング・セットから作成」を選択します。
このSQL試行では、直接SQLチューニング・セットから試行に実行計画および実行統計がコピーされます。
これらの各種の方法の詳細は、「変更前のSQLパフォーマンスの測定」を参照してください。
-
-
「SQL当たりの時間制限」リストで、次のいずれかのアクションを実行して、試行時のSQL実行の時間制限を決定します。
-
「5分」を選択します。
この実行では、SQLチューニング・セット内の各SQL文が最大5分間実行され、パフォーマンス・データが収集されます。
-
「無制限」を選択します。
この実行では、SQLチューニング・セット内の各SQL文が完了するまで実行され、パフォーマンス・データが収集されます。実行統計を収集することによってパフォーマンス分析の精度は大幅に向上しますが、分析にかかる時間は長くなります。1つのSQL文によってタスクが長時間停止状態になる場合があるため、この設定は使用しないことをお薦めします。
-
「カスタマイズ」を選択して、指定する秒数、分数、時間数を入力します。
-
-
テスト・システムのデータベース環境が可能なかぎり本番環境と一致していることを確認して、「試行環境設定済み」を選択します。
-
「スケジュール」セクションで、次の手順を実行します。
-
「タイムゾーン」リストで、タイムゾーン・コードを選択します。
-
「即時」(即時にタスクを開始する場合)または、「後で」(「日付」および「時間」フィールドで指定した時間にタスクを開始するようスケジュールする場合)を選択します。
-
-
「発行」をクリックします。
実行が開始されると、「ガイド付きワークフロー」ページが表示されます。
実行中、この手順のステータス・アイコンは時計に変わります。ステータス・アイコンをリフレッシュするには、「リフレッシュ」をクリックします。選択したオプションおよびSQLワークロードのサイズによっては、実行が完了するまで時間がかかる場合があります。実行が完了したら、ステータス・アイコンがチェック・マークに変わり、次の手順の「実行」アイコンが有効になります。
-
変更前のパフォーマンス・データが作成されたらシステムに変更を行い、「変更後のSQL試行の作成」の説明に従って、変更後のテスト・システム上でSQLチューニング・セットのSQL文を再度実行し、変更後のパフォーマンス・データを作成します。
4.2 APIを使用した変更前のSQL試行の作成
この項では、DBMS_SQLPA
パッケージを使用して変更前のパフォーマンス・データを構築する方法について説明します。
変更前のSQL試行を作成するには、次の手順に従います。
-
次のパラメータを使用して、
EXECUTE_ANALYSIS_TASK
プロシージャをコールします。-
task_name
パラメータを、実行するSQLパフォーマンス・アナライザのタスクの名前に設定します。 -
次のいずれかの方法で
execution_type
パラメータを設定します。-
EXPLAIN PLAN
に設定して、SQL文を実行せずに、SQLチューニング・セット内のすべてのSQL文の実行計画を生成します。 -
TEST EXECUTE
(推奨)に設定し、SQLチューニング・セット内のすべての文を実行し、それらの実行計画および実行統計を生成します。TEST EXECUTE
を指定すると、プロシージャによって実行計画および実行統計が生成されます。実行統計によって、パフォーマンスが改善されたSQL文またはパフォーマンスが低下したSQL文をSQLパフォーマンス・アナライザで特定できるようになります。実行計画を生成するのみでなく、実行統計を収集することによってパフォーマンス分析の精度は大幅に向上しますが、分析にかかる時間は長くなります。 -
SQL試行の実行統計および計画に関してSQLチューニング・セットを参照するように、
CONVERT SQLSET
を設定します。実行パラメータSQLSET_NAME
およびSQLSET_OWNER
の値も指定する必要があります。
-
-
execution_name
パラメータを使用して、実行を識別するための名前を指定します。指定しなかった場合、SQLパフォーマンス・アナライザによってタスク実行の名前が自動的に生成されます。 -
execution_params
パラメータを使用して、実行パラメータを指定します。execution_params
パラメータは、指定した実行の名前/値ペアとして指定されます。たとえば、次の実行パラメータを設定できます。-
time_limit
パラメータは、グローバルな時間制限を指定して、タイムアウト前にSQLチューニング・セット内のすべてのSQL文を処理します。 -
local_time_limit
パラメータは、時間制限を指定して、タイムアウト前にSQLチューニング・セット内の各SQL文を処理します。 -
リモートでテストを実行する場合は、
DATABASE_LINK
タスク・パラメータをDBMS_SQLPA
パッケージのEXECUTE
権限およびテスト・システムのADVISOR
権限を持つユーザーに接続しているパブリック・データベース・リンクのグローバル名に設定します。 -
行ロックの取得と行の変更を含め、DML文を完全に実行するには、
EXECUTE_FULLDML
パラメータをTRUE
に設定します。SQLパフォーマンス・アナライザは、DML実行の後でロールバックを発行して、永続的な変更が行われないようにします。このパラメータのデフォルト値はFALSE
で、データを変更せずにDML文の問合せ部分のみが実行されます。 -
関連する取得済の
init.ora
設定をテスト実行時にリストアするには、APPLY_CAPTURED_COMPILENV
パラメータをTRUE
に設定します。一般に、SQL試行を実行するのは、環境を変更するときの変更内容のテストが目的であるため、これはデフォルトの動作ではありません。ただし、この方法は、init.ora
設定が変更されていない場合(索引作成などの場合)に使用できます。この方法は、リモートSQL試行ではサポートされていません。
-
次の例は、システム変更前に行われたファンクション・コールを示しています。
EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(task_name => 'my_spa_task', - execution_type => 'TEST EXECUTE', - execution_name => 'my_exec_BEFORE_change');
-
変更前のパフォーマンス・データが作成されたらシステムに変更を行い、「変更後のSQL試行の作成」の説明に従って、変更後のテスト・システム上でSQLチューニング・セットのSQL文を再度実行し、変更後のパフォーマンス・データを作成します。
関連項目:
-
DBMS_SQLPA.EXECUTE_ANALYSIS_TASK
ファンクションについては、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。