プライマリ・コンテンツに移動
Oracle® Database Testingガイド
12cリリース1 (12.1)
B71349-07
目次へ移動
目次
索引へ移動
索引

前
次

6.2.5 APIを使用した、リモートSQL試行からのパフォーマンスが低下したSQL文のチューニング

別のデータベースでSQLワークロードをリモートで実行することを選択した場合は、SQLパフォーマンス・アナライザ・タスクが存在するシステムではなく、リモート・データベースでSQL試行によって識別されたパフォーマンスの低下をチューニングする必要があります。

APIを使用して、リモートSQL試行からのパフォーマンスが低下したSQL文をチューニングするには、次の手順に従います。

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

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

  3. 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;
    /
    
  4. 任意の方法(Oracle Data Pumpやデータベース・リンクなど)でステージング表を(SQLワークロードが実行された)リモート・データベースに移動します。

  5. リモート・データベースで、ステージング表からSQLチューニング・セットをインポートします。

    BEGIN
      DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET(
        sqlset_name => 'SUB_STS1', 
        staging_table_name => 'STG_TAB1', 
        replace => TRUE);
    END;
    /
    
  6. 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パッケージおよびタイプ・リファレンス』を参照してください。