別のデータベースでSQLワークロードをリモートで実行することを選択した場合は、SQLパフォーマンス・アナライザ・タスクが存在するシステムではなく、リモート・データベースでSQL試行によって識別されたパフォーマンスの低下をチューニングする必要があります。
APIを使用して、リモートSQL試行からのパフォーマンスが低下したSQL文をチューニングするには、次の手順に従います。
SQLパフォーマンス・アナライザが実行されているシステムで、パフォーマンスが低下しているSQL文のサブセットをSQLチューニング・セットとして作成します。
DECLARE sqlset_cur DBMS_SQLTUNE.SQLSET_CURSOR; BEGIN DBMS_SQLTUNE.CREATE_SQLSET('SUB_STS1', 'test purpose'); OPEN sqlset_cur FOR SELECT value(p) FROM table( DBMS_SQLTUNE.SELECT_SQLPA_TASK( task_name => 'SPA_TASK1', execution_name => 'COMP', level_filter => 'REGRESSED')) p; DBMS_SQLTUNE.LOAD_SQLSET('SUB_STS1', sqlset_cur); CLOSE sqlset_cur; END; /
'REGRESSED'
以外にも、'CHANGED'
、'ERRORS'
、'CHANGED_PLANS'
などのフィルタを使用して、SQLチューニング・セットのSQL文を選択できます。詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
SQLチューニング・セットをエクスポートするステージング表を作成します。
BEGIN DBMS_SQLTUNE.CREATE_STGTAB_SQLSET( table_name => 'STG_TAB1', schema_name => 'JOHNDOE', tablespace_name => 'TBS_1', db_version => DBMS_SQLTUNE.STS_STGTAB_11_1_VERSION); END; /
db_version
パラメータを使用して、SQLチューニング・セットのエクスポートとチューニングを行う適切なバージョンのデータベースを指定します。この例では、Oracle Database 11g リリース1を実行しているシステムにエクスポートできる形式でステージング表を作成し、後でSQLチューニング・アドバイザを使用してこの表をチューニングします。他のデータベース・バージョンの詳細は、そのリリースの『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
SQLチューニング・セットをステージング表にエクスポートするには、次の手順を実行します。
BEGIN DBMS_SQLTUNE.PACK_STGTAB_SQLSET( sqlset_name => 'SUB_STS1', sqlset_owner => 'JOHNDOE', staging_table_name => 'STG_TAB1', staging_schema_owner => 'JOHNDOE', db_version => DBMS_SQLTUNE.STS_STGTAB_11_1_VERSION); END; /
任意の方法(Oracle Data Pumpやデータベース・リンクなど)でステージング表を(SQLワークロードが実行された)リモート・データベースに移動します。
リモート・データベースで、ステージング表からSQLチューニング・セットをインポートします。
BEGIN DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET( sqlset_name => 'SUB_STS1', staging_table_name => 'STG_TAB1', replace => TRUE); END; /
SQLチューニング・アドバイザを実行し、SQLチューニング・セット内のパフォーマンスが低下したSQL文をチューニングします。
BEGIN sts_name := 'SUB_STS1'; sts_owner := 'JOHNDOE'; tune_task_name := 'TUNE_TASK1'; tname := DBMS_SQLTUNE.CREATE_TUNING_TASK(sqlset_name => sts_name, sqlset_owner => sts_owner, task_name => tune_task_name); EXEC DBMS_SQLTUNE.SET_TUNING_TASK_PARAMETER(:tname, 'APPLY_CAPTURED_COMPILENV', 'FALSE'); exec_name := DBMS_SQLTUNE.EXECUTE_TUNING_TASK(tname); END; /
注意:
この例で使用するAPPLY_CAPTURED_COMPILENV
パラメータは、Oracle Database 11gリリース1以上のリリースでのみサポートされています。これより前のバージョンのOracle Databaseからデータベース・アップグレードをテストする場合は、かわりにSQLチューニング・セットに保存されている環境変数が使用されます。
パフォーマンスが低下したSQL文をチューニングしたら、SQLパフォーマンス・アナライザを使用して、それらの変更をテストする必要があります。新しいSQL試行をテスト・システムで実行すると、2番目の比較(新しいSQL試行と最初の試行の比較)が実行され、結果が検証されます。SQLパフォーマンス・アナライザによってパフォーマンスが安定していることが表示されたら、この手順で行った修正を本番システムに対して実行します。
関連項目:
SQLチューニング・アドバイザの使用方法およびSQLチューニング・セットの転送の詳細については、『Oracle Database SQLチューニング・ガイド』を参照してください。
DBMS_SQLTUNE
パッケージについては、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。