別のデータベースで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パッケージおよびタイプ・リファレンス』を参照してください。