ヘッダーをスキップ
Oracle® Database 2日でパフォーマンス・チューニング・ガイド
11gリリース2(11.2)
B56313-03
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

10 SQL文のチューニング

SQL文はOracle Databaseによって取得されるデータを表します。たとえば、SQL文を使用して部門の従業員の名前を取得できます。Oracle DatabaseによってSQL文が実行される場合は、問合せオプティマイザ(オプティマイザとも呼ばれる)によって、結果を取得する最適で効率的な方法が最初に判断されます。

オプティマイザでは、全表スキャンと呼ばれる表のすべてのデータの読取りか、索引を使用するかどちらがより効率的なのかを判断します。すべての可能なアプローチのコストを比較し、最もコストの少ないアプローチが選択されます。SQL文を物理的に実行するアクセス方法は、実行計画と呼ばれ、オプティマイザにより生成されます。実行計画の決定は、SQL文の処理において重要な手順で、実行時間に非常に影響します。

問合せオプティマイザはSQL文のチューニングにも役立ちます。SQLチューニング・アドバイザおよびSQLアクセス・アドバイザを使用すると、SQL文またはSQL文のセットを調べるアドバイス・モードで問合せオプティマイザを実行でき、SQL文の効率を向上させる方法が判断されます。SQLチューニング・アドバイザおよびSQLアクセス・アドバイザはSQLプロファイルの作成、SQL文の再構築、付加的な索引またはマテリアライズド・ビューの作成、およびオプティマイザ統計のリフレッシュなどの様々な推奨事項を作成できます。さらに、Oracle Enterprise Manager(Enterprise Manager)を使用すると、これらの推奨事項の多くを簡単に受け入れ、実装できます。

SQLアクセス・アドバイザは、主に索引およびマテリアライズド・ビューの追加および削除などのスキーマ変更の推奨事項を作成する場合に使用します。SQLチューニング・アドバイザは、SQLプロファイルの作成、SQL文の再構築などの他のタイプの推奨事項の作成に使用します。新しい索引を作成するとパフォーマンスが大幅に向上できる場合、SQLチューニング・アドバイザは索引の作成を推奨する可能性があります。ただし、これらの推奨事項は、典型的なSQL文のセットを含んだSQLワークロードを使用してSQLアクセス・アドバイザを実行し、検証する必要があります。

この章ではSQLチューニング・アドバイザを使用するSQL文のチューニング方法を説明しています。次の項で構成されています。


参照:


SQLチューニング・アドバイザを使用したSQL文のチューニング

SQLチューニング・アドバイザを使用して、単一または複数のSQL文をチューニングできます。複数のSQL文をチューニングする場合、SQLチューニング・アドバイザはSQL文間の相互依存を認識しません。SQLチューニング・アドバイザを多数のSQL文に対して実行すると、チューニング・アドバイスを取得できます。

Oracle Databaseでは、SQLチューニング・レポートが自動的に生成されます。自動SQLチューニングは自動メンテナンス・タスクとしてシステム・メンテナンス・ウィンドウで実行され、高負荷のSQL文の実行計画を改善する方法を調べます。メンテナンス・ウィンドウは、自動化メンテナンス・タスクが実行される連続的な時間間隔です。

SQLチューニング・アドバイザを使用したSQLの手動チューニング

第9章「高負荷のSQL文の識別」で説明されているように、自動データベース診断モニター(ADDM)は高負荷のSQL文を自動的に識別します。ADDMがこのような文を識別した場合は、「推奨事項の詳細」ページの「SQLチューニング・アドバイザのスケジュール」または「SQLチューニング・アドバイザの実行」をクリックして、SQLチューニング・アドバイザを実行します。

SQLチューニング・アドバイザを使用したSQL文のチューニング手順

  1. データベースのホームページの「関連リンク」の下にある「アドバイザ・セントラル」をクリックします。

    「アドバイザ・セントラル」ページが表示されます。

  2. 「アドバイザ」で、「SQLアドバイザ」をクリックします。

    「SQLアドバイザ」ページが表示されます。

  3. 「SQLチューニング・アドバイザ」で、「SQLチューニング・アドバイザ」をクリックします。

    「SQLチューニング・アドバイザのスケジュール」ページが表示されます。

    sql_tuning_advisor_empty.gifの説明が続きます。
    sql_tuning_advisor_empty.gifの説明

  4. 「名前」フィールドに、SQLチューニング・タスクの名前を入力します。

    指定がない場合、SQLチューニング・アドバイザはシステムで生成された名前を使用します。

  5. 次のいずれかの操作を行います。

    • 単一または複数の高負荷SQL文に対してSQLチューニング・タスクを実行する場合は、「SQLチューニング・アドバイザのデータ・ソース・リンク」で、「トップ・アクティビティ」をクリックします。

      「トップ・アクティビティ」ページが表示されます。

      「上位SQL」で、チューニングするSQL文を選択し、「SQLチューニング・アドバイザのスケジュール」をクリックします。「トップ・アクティビティ」ページを使用した高負荷SQL文の識別の詳細は、「上位SQLに基づく高負荷SQL文の識別」を参照してください。

    • 自動ワークロード・リポジトリ(AWR)から履歴のSQL文に対するSQLチューニング・タスクを実行するには、「SQLチューニング・アドバイザのデータ・ソース・リンク」で、「履歴SQL(AWR)」をクリックします。

      「履歴SQL(AWR)」ページが表示されます。

      「履歴SQL(AWR)」で、グラフの下の範囲をクリックし、データベースで実行されたSQL文を表示する時間に対して24時間間隔を選択します。「選択した24時間間隔の詳細」で、チューニングするSQL文を選択し、「SQLチューニング・アドバイザのスケジュール」をクリックします。

    • SQLチューニング・セットに対してSQLチューニング・タスクを実行するには、「SQLチューニング・セット」をクリックします。

      「SQLチューニング・セット」ページが表示されます。

      チューニングするSQL文を含んだSQLチューニング・セットを選択し、「SQLチューニング・アドバイザのスケジュール」をクリックします。SQLチューニング・セットの作成方法については、「SQLチューニング・セットの作成」を参照してください。

    「SQLチューニング・アドバイザのスケジュール」ページが表示されます。

  6. 選択した文のSQLテキストを表示するには、「SQL文」を開きます。

    sql_tuning_sql_statements.gifの説明が続きます。
    sql_tuning_sql_statements.gifの説明

  7. 「有効範囲」で、チューニングを実行する有効範囲を選択します。次のいずれかの操作を行います。

    • 「制限」を選択します。

      有効範囲を制限すると、約1秒で各SQL文がチューニングされますが、SQLプロファイルは推奨されません。

    • 「包括」を選択し、「文ごとの時間制限」に各SQL文に対する時間制限(分単位)を設定し、また「合計時間の制限」に合計の時間制限(分単位)を設定します。設定した時間制限が少なすぎると推奨事項の質に影響を及ぼすことに注意してください。

      包括モードでは、単一のSQL文のチューニングに数分かかります。各問合せをハード解析する必要があるため、このモードは時間集中型であり、またリソース集中型でもあります。したがって、システム全体に重大な影響のある高負荷SQL文に対してのみ包括的な有効範囲を使用します。

    SQLプロファイルの詳細は、「SQLプロファイルの管理」を参照してください。

  8. 「スケジュール」で、次のいずれかの操作を行います。

    • SQLチューニング・タスクをすぐに実行するには、「即時」を選択して「発行」をクリックします。

      「処理中: SQLチューニング・アドバイザのタスク」ページが表示されます。

    • 「後で」を選択して未来の特定の時間をスケジュールし、「OK」をクリックします。

  9. データベースのホームページの「関連リンク」の下にある「アドバイザ・セントラル」をクリックします。

    「アドバイザ・セントラル」ページが表示されます。

    「アドバイザ・タスク」の「結果」セクションに、アドバイザの実行結果がリストされます。

    sta_advisor_results.gifの説明が続きます。
    sta_advisor_results.gifの説明

  10. 表から結果を選択して、「結果の表示」をクリックします。

    「SQL IDの推奨」ページが表示されます。

    rec_for_sql_id.gifの説明が続きます。
    rec_for_sql_id.gifの説明

    SQLチューニング・セットを使用した場合、複数の推奨事項が表示されます。推奨事項を実装するかどうか判断しやすくするため、「ベネフィット(%)」列に推奨事項の実装の予測される利点が表示されます。「論理」列には、推奨事項が作成される理由の説明が表示されます。

  11. 推奨事項を実装するには、次のいずれかの操作を行います。

    • 自動ソリューションが推奨されている場合は、「実装」をクリックします。

      確認ページが表示されます。「はい」をクリックして変更を確定します。

    • 手動のソリューションが推奨されている場合は、推奨事項の実装を検討します。

自動SQLチューニング結果の表示

自動ワークロード・リポジトリ(AWR)内のデータを分析することにより、データベースでルーチン・メンテナンス・タスクが識別されます。自動化メンテナンス・タスクのインフラストラクチャ(AutoTaskと呼ばれる)により、これらのタスクがメンテナンス・ウィンドウで実行されるようにスケジュールされます。

メンテナンス・ウィンドウは、MAINTENANCE_WINDOW_GROUPというウィンドウ・グループに属するOracle Schedulerの時間間隔です。デフォルトでは、1つのウィンドウが週の各曜日にスケジュールされます。これらのメンテナンス・ウィンドウの属性(開始と終了の時間、頻度および曜日を含む)をカスタマイズできます。

デフォルトでは、AutoTaskによって、すべてのメンテナンス・ウィンドウで次の自動化メンテナンス・タスクが実行されます。

  • オプティマイザ統計の収集

  • セグメント・アドバイザ

  • SQLチューニング・アドバイザ

監視された高負荷SQL文におけるSQLチューニング・アドバイザの自動実行の結果を表示できます。

自動SQLチューニング結果の表示手順

  1. データベースのホームページの「関連リンク」の下にある「アドバイザ・セントラル」をクリックします。

    「アドバイザ・セントラル」ページが表示されます。

  2. 「アドバイザ」で、「SQLアドバイザ」をクリックします。

    「SQLアドバイザ」ページが表示されます。

  3. 「SQLチューニング・アドバイザ」で、「自動SQLチューニングの結果」をクリックします。

    「自動SQLチューニング結果のサマリー」ページが表示されます。

    ページの上部半分には、SQLチューニング・タスクのステータスおよびアクティビティのサマリーのセクションがあります。

    sql_tuning_auto_result.gifの説明が続きます。
    sql_tuning_auto_result.gifの説明

  4. 「時間間隔」リストで「すべて」を選択して、「実行」をクリックします。

    「全体タスク統計」セクションと「プロファイル影響統計」セクションがリフレッシュされます。

    sql_tuning_auto_stats.gifの説明が続きます。
    sql_tuning_auto_stats.gifの説明

  5. オプションで、「タスク・ステータス」セクションで「構成」をクリックし、自動SQLチューニング・タスクの属性を変更します。

    「自動化メンテナンス・タスク構成」ページが表示されます。

    このページで、自動SQLチューニング・タスクを有効または無効にでき、実行日を指定できます。「適用」または「元に戻す」をクリックして前のページに戻ります。

  6. 「タスク・アクティビティ・サマリー」セクションで、「時間間隔」に対して「すべて」が選択されたままにして、「レポートの表示」をクリックします。

    「自動SQLチューニング結果の詳細」ページが表示されます。

    このページには、SQLチューニングの候補としてデータベースにより自動的に選択されたSQL文がリストされます。

    sql_tuning_result_details.gifの説明が続きます。
    sql_tuning_result_details.gifの説明

  7. 「推奨」で、SQL文を選択して「推奨の表示」をクリックします。

    「SQL IDの推奨」ページが表示されます。

    sql_tuning_recommend.gifの説明が続きます。
    sql_tuning_recommend.gifの説明

    このページには、SQLプロファイルおよび索引に対する推奨事項を含めることができます。SQLチューニング・アドバイザにより作成された推奨事項の実装方法を習得するには、「SQLチューニング・アドバイザを使用したSQLの手動チューニング」を参照してください。

SQLチューニング・セットの管理

SQLチューニング・セットは、1つ以上のSQL文、実行統計および実行コンテキストを含むデータベース・オブジェクトです。SQLチューニング・アドバイザ、SQLアクセス・アドバイザ、SQLパフォーマンス・アナライザなどのアドバイザに対する入力として使用できます。AWR、カーソル・キャッシュ、指定した高負荷SQL文など異なるSQLソースからSQLチューニング・セットへSQL文をロードできます。

SQLチューニング・セットの内容は次のとおりです。

アプリケーション・モジュール名とアクションまたは実行統計のいずれかを使用してSQL文にフィルタを適用できます。また、SQL文は実行統計の組合せに基づいてランク付けできます。

SQLチューニング・セットは転送可能で、SQLワークロードはリモート・パフォーマンス診断およびチューニングのためデータベース間で転送できます。高負荷SQL文が本番システムで識別された場合、本番システムでの直接の調査およびチューニング・アクティビティの実行はお薦めしません。この機能によって、高負荷SQL文を、安全に分析およびチューニングが可能なテスト・システムに転送できます。SQLチューニング・セットの転送の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

Enterprise Managerを使用すると、次の手順を実行してSQLチューニング・セットを管理できます。

SQLチューニング・セットの作成

この項では、Enterprise Managerを使用したSQLチューニング・セットの作成方法について説明します。

SQLチューニング・セットの作成手順

  1. 「SQLチューニング・セットの作成: オプション」で説明されているとおり、SQLチューニング・セットに対する初期オプションを指定します。

  2. 「SQLチューニング・セットの作成: ロード・メソッド」で説明されているとおり、SQL文を収集してSQLチューニング・セットにロードするために使用するロード・メソッドを選択します。

  3. 「SQLチューニング・セットの作成: フィルタ・オプション」で説明されているとおり、SQLチューニング・セットに対するフィルタ・オプションを指定します。

  4. 「SQLチューニング・セットの作成: スケジュール」で説明されているとおり、SQL文を収集してSQLチューニング・セットにロードするために、ジョブをスケジュールおよび発行します。

SQLチューニング・セットの作成: オプション

SQLチューニング・セットを作成する最初の手順として、名前、所有者、説明などのセットのオプションを指定します。

SQLチューニング・セット作成のオプションの指定手順: 

  1. 「データベース・パフォーマンス」ページの「その他の監視リンク」で、「SQLチューニング・セット」をクリックします。

    「SQLチューニング・セット」ページが表示されます。

  2. 「作成」をクリックします。

    「SQLチューニング・セットの作成: オプション」ページが表示されます。

  3. 次の詳細を入力します。

    • 「SQLチューニング・セット名」に、SQLチューニング・セットの名前を入力します。

    • 「所有者」に、SQLチューニング・セットの所有者を入力します。

    • 「説明」に、SQLチューニング・セットの説明を入力します。

  4. 空のSQLチューニング・セットを作成して後でSQL文を追加する場合は、オプションで、次の手順を完了します。

    1. 「空のSQLチューニング・セットの作成」を選択します。

    2. 「次へ」をクリックします。

      「SQLチューニング・セットの作成: 確認」ページが表示されます。

    3. 選択したSQLチューニング・セット・オプションを確認して、「発行」をクリックします。

      空のSQLチューニング・セットが作成されます。後でSQL文を追加できます。

  5. 「次へ」をクリックします。

    「SQLチューニング・セットの作成: ロード・メソッド」ページが表示されます。

    sts_load_methods.gifの説明が続きます。
    sts_load_methods.gifの説明

  6. 次の手順に進みます(「SQLチューニング・セットの作成: ロード・メソッド」を参照)。

SQLチューニング・セットの作成: ロード・メソッド

SQLチューニング・セットに対するオプションを指定した後で、次の項で説明されているとおり、SQLチューニング・セットにSQL文を収集してロードするために使用するロード・メソッドを選択します。


ヒント:

SQLチューニング・セットに対するロード・メソッドを選択する前に、「SQLチューニング・セットの作成: オプション」で説明されているとおり、SQLチューニング・セットを作成して初期オプションを指定します。

カーソル・キャッシュからの増分的なアクティブなSQL文のロード

カーソル・キャッシュからSQLチューニング・セットに指定した期間中にアクティブなSQL文を増分的にロードできます。これにより、SQLキャッシュに格納されている現在および最近のSQL文を収集できるだけでなく、将来の指定した期間中に実行されるSQL文も収集できるようになります。

アクティブなSQL文をカーソル・キャッシュから増分的にロードする手順: 

  1. 「SQLチューニング・セットの作成: ロード・メソッド」ページで、「カーソル・キャッシュから一定期間におけるアクティブなSQL文を増分的に取得」を選択します。

  2. 「期間」フィールドで、アクティブなSQL文を取得する期間を指定します。

  3. 「頻度」フィールドで、指定した期間中にアクティブなSQL文を取得する頻度を指定します。

  4. 「次へ」をクリックします。

    「SQLチューニング・セットの作成: フィルタ・オプション」ページが表示されます。

  5. 次の手順に進みます(「SQLチューニング・セットの作成: フィルタ・オプション」を参照)。

カーソル・キャッシュからのSQL文のロード

カーソル・キャッシュからSQLチューニング・セットにSQL文をロードできます。ただし、SQLキャッシュに格納されているのは現在および最近のSQL文のみであるため、これらのSQL文を1回のみ収集すると、SQLチューニング・セットがデータベースのワークロード全体を表さない場合があります。

カーソル・キャッシュからのSQL文のロード手順: 

  1. 「SQLチューニング・セットの作成: ロード・メソッド」ページで、「SQL文を1度だけロード」を選択します。

  2. 「データソース」リストから「カーソル・キャッシュ」を選択します。

  3. 「次へ」をクリックします。

    「SQLチューニング・セットの作成: フィルタ・オプション」ページが表示されます。

  4. 次の手順に進みます(「SQLチューニング・セットの作成: フィルタ・オプション」を参照)。

AWRスナップショットからのSQL文のロード

AWRスナップショットで取得されたSQL文をロードできます。これは、後で比較またはチューニングに使用するために、目的の期間の指定したスナップショットに対するSQL文を収集するときに役立ちます。

AWRスナップショットからのSQL文のロード手順: 

  1. 「SQLチューニング・セットの作成: ロード・メソッド」ページで、「SQL文を1度だけロード」を選択します。

  2. 「データソース」リストで、「AWRスナップショット」を選択します。

  3. 「AWRスナップショット」フィールドで、含めるスナップショットを選択します。次のいずれかの操作を行います。

    • 「すべて」または「過去24時間」などの期間を選択し、手順5に進みます。

      指定された期間内にAWRに取得および格納されたスナップショットのみが含まれます。

    • 「カスタマイズ」を選択し、手順4に進みます。

      ユーザーが指定したカスタマイズ済の期間内にAWRに取得および格納されたスナップショットのみ含まれます。

  4. スナップショットのカスタマイズ済の期間を選択する手順:

    1. 「カスタマイズ」を選択して、「実行」をクリックします。

      期間の選択ウィンドウが開きます。

    2. 開始スナップショットに「期間開始時間」を選択し、目的の開始時間に対応する「アクティブ・セッション」グラフの下のスナップショット・アイコンをクリックします。

    3. 最後のスナップショットに「期間終了時間」を選択し、目的の終了時間に対応する「アクティブ・セッション」グラフの下のスナップショット・アイコンをクリックします。

    4. 「選択」をクリックします。

    この例では、開始時間として2009年2月17日午後12時10分の時点のスナップショットが選択され、終了時間として2009年2月17日午後1時30分の時点のスナップショットが選択されています。

    sts_load_time_period.gifの説明が続きます。
    sts_load_time_period.gifの説明

  5. 「次へ」をクリックします。

    「SQLチューニング・セットの作成: フィルタ・オプション」ページが表示されます。

  6. 次の手順に進みます(「SQLチューニング・セットの作成: フィルタ・オプション」を参照)。

AWRベースラインからのSQL文のロード

AWRベースラインに取得されたSQL文をロードできます。これは、後で比較またはチューニングに使用できる設定済のパフォーマンス・レベルの期間を表すSQL文を収集するときに役立ちます。

AWRベースラインからのSQL文のロード手順: 

  1. 「SQLチューニング・セットの作成: ロード・メソッド」ページで、「SQL文を1度だけロード」を選択します。

  2. 「データソース」フィールドで「AWRベースライン」を選択します。

  3. 「AWRベースライン」フィールドで、含めるベースラインを選択します。

    sts_load_baseline.gifの説明が続きます。
    sts_load_baseline.gifの説明

  4. 「次へ」をクリックします。

    「SQLチューニング・セットの作成: フィルタ・オプション」ページが表示されます。

  5. 次の手順に進みます(「SQLチューニング・セットの作成: フィルタ・オプション」を参照)。

ユーザー定義のワークロードからのSQL文のロード

SQL文は、表またはビューからインポートすることでロードできます。これは、分析するワークロードが現在データベースで実行中ではない場合、または既存のAWRスナップショットまたはAWRベースラインに取得されている場合に役立ちます。

ユーザーが定義する表の名前または表の数に関して、どのスキーマにワークロードが存在するかに関する制約はありません。ただし、表形式はUSER_WORKLOAD表の形式に一致する必要があります。

ユーザー定義ワークロードからのSQL文のロード手順: 

  1. 「SQLチューニング・セットの作成: ロード・メソッド」ページで、「SQL文を1度だけロード」を選択します。

  2. 「データソース」フィールドで「ユーザー定義ワークロード」を選択します。

  3. 「ユーザー定義ワークロード」フィールドで、含める表またはビューを選択します。

    sts_load_workload.gifの説明が続きます。
    sts_load_workload.gifの説明

  4. 「次へ」をクリックします。

    「SQLチューニング・セットの作成: フィルタ・オプション」ページが表示されます。

  5. 次の手順に進みます(「SQLチューニング・セットの作成: フィルタ・オプション」を参照)。

SQLチューニング・セットの作成: フィルタ・オプション

ロード・メソッドを選択したら、フィルタを適用しSQLチューニング・セットで検出されたSQL文の範囲を削減できます。フィルタの使用はオプションですが、次の利点があります。

  • フィルタを使用することにより、ワークロード・ソースとしてのSQLチューニング・セットを使用する各種アドバイザ(SQLチューニング・アドバイザ、SQLアクセス・アドバイザ、SQLパフォーマンス・アナライザなど)がワークロードからのSQL文の特定のサブセットに基づいて推奨事項を生成するため、よりよい推奨事項を生成できる可能性があります。

  • 各種アドバイザに対してワークロード・ソースが使用されている場合、ワークロードから不要なSQL文を削除するフィルタを使用して、処理時間を大幅に削減できます。


ヒント:

SQLチューニング・セットのフィルタ・オプションを指定する前に、次の操作を行います。

SQLチューニング・セットのフィルタ・オプションの指定手順: 

  1. 「SQLチューニング・セットの作成: フィルタ・オプション」ページで、検索に使用するフィルタ条件の値を「値」列に指定し、「演算子」列に演算子および条件を指定します。

    指定したフィルタ条件すべてに一致するSQL文のみSQLチューニング・セットに追加されます。指定していないフィルタ値は検索にフィルタ条件として含まれません。

    デフォルトでは、次のフィルタ条件が表示されます。

    • スキーマ名の解析

    • SQLテキスト

    • SQL ID

    • 経過時間

  2. フィルタ条件を追加するには、「フィルタ条件」で追加するフィルタ条件を選択し、「フィルタまたは列の追加」をクリックします。

    目的のフィルタ条件が追加されたら、「値」列で値を指定し、「演算子」列で演算子または条件を指定します。

  3. 使用していないフィルタ条件を削除するには、削除するフィルタ条件に対応する「削除」列にあるアイコンをクリックします。

  4. 「次へ」をクリックします。

    「SQLチューニング・セットの作成: スケジュール」ページが表示されます。

  5. 次の手順に進みます(「SQLチューニング・セットの作成: スケジュール」を参照)。

SQLチューニング・セットの作成: スケジュール

SQLチューニング・セットに対してフィルタ・オプションを指定したら、ジョブをスケジュールおよび発行してSQL文を収集し、SQLチューニング・セットにロードできます。


ヒント:

ジョブをスケジュールしてSQLチューニング・セットを作成する前に、次の操作を行います。

ジョブをスケジュールおよび発行してSQLチューニング・セットを作成する手順: 

  1. システムで生成されたジョブ名を使用しない場合は、「SQLチューニング・セットの作成: スケジュール」ページの「ジョブ・パラメータ」で、「ジョブ名」フィールドに名前を入力します。

  2. 「説明」フィールドに、ジョブの説明を入力します。

  3. 「スケジュール」で、次のいずれかの操作を行います。

    • 即時: 発行直後すぐにジョブを実行する場合

    • 後で:「タイムゾーン」、「日付」および「時間」フィールドで指定した時間を使用してジョブを実行する場合

    sts_schedule.gifの説明が続きます。
    sts_schedule.gifの説明

  4. 「次へ」をクリックします。

    「SQLチューニング・セットの作成: 確認」ページが表示されます。

    sts_review.gifの説明が続きます。
    sts_review.gifの説明

  5. 選択したSQLチューニング・セット・オプションを確認します。

    ジョブが使用するSQL文を表示するには、「SQL表示」を拡張します。

  6. 「発行」をクリックします。

    「SQLチューニング・セット」ページが表示されます。

    ジョブがすぐに実行するようにスケジュールされている場合、メッセージが表示され、ジョブおよびSQLチューニング・セットが正常に作成されたことが通知されます。ジョブを後で実行するようスケジュールされた場合、メッセージが表示され、ジョブが正常に作成されたことが通知されます。

  7. 操作のステータスなどジョブの詳細を表示するには、「ジョブ詳細を表示」をクリックします。

    「ジョブの表示」ページが表示され、ジョブの詳細が表示されます。

SQLチューニング・セットの削除

この項では、SQLチューニング・セットを削除する方法について説明します。記憶域を保持するには、データベースに格納されている未使用のSQLチューニング・セットを定期的に削除します。

SQLチューニング・セットの削除手順: 

  1. 「データベース・パフォーマンス」ページの「その他の監視リンク」で、「SQLチューニング・セット」をクリックします。

    「SQLチューニング・セット」ページが表示されます。

    このページには既存のSQLチューニング・セットが表示されます。

  2. 削除するSQLチューニング・セットを選択し、「削除」をクリックします。

    「確認」ページが表示され、選択したSQLチューニング・セットを削除するかどうかの確認を求められます。

  3. 「はい」をクリックします。

    「SQLチューニング・セット」ページが表示されます。

    SQLチューニング・セットが正常に削除されたことを示す確認メッセージが表示されます。

SQLチューニング・セットの転送

最初にSQLチューニング・セットを特定のデータベースからエクスポートした後で他のデータベースにインポートすることで、SQLチューニング・セットを特定のシステムから他のシステムに転送できます。

この項の内容は次のとおりです。

SQLチューニング・セットのエクスポート

この項では、別のシステムに転送できるようにSQLチューニング・セットをエクスポートする方法について説明します。

SQLチューニング・セットのエクスポート手順: 

  1. 「データベース・パフォーマンス」ページの「その他の監視リンク」で、「SQLチューニング・セット」をクリックします。

    「SQLチューニング・セット」ページが表示されます。

    このページには既存のSQLチューニング・セットが表示されます。

  2. エクスポートするSQLチューニング・セットを選択し、「エクスポート」をクリックします。

    「SQLチューニング・セットのエクスポート」ページが表示されます。

    sts_export.gifの説明が続きます。
    sts_export.gifの説明

  3. 「ディレクトリ・オブジェクト」フィールドで、エクスポート・ファイルを作成するディレクトリを選択します。

    たとえば、Oracle Data Pumpディレクトリを使用するには、DATA_PUMP_DIRを選択します。「ディレクトリ名」フィールドで自動的にリフレッシュされ、選択したディレクトリが表示されます。

  4. 「エクスポート・ファイル」フィールドに、データベースにエクスポートするファイルの名前を入力します。

    または、データベースによって生成される名前を使用することもできます。

  5. 「ログ・ファイル」フィールドにエクスポート操作のログ・ファイルの名前を入力します。

    または、データベースによって生成される名前を使用することもできます。

  6. 表領域を選択して、エクスポート操作のデータを一時的に格納します。

    デフォルトでは、SYSAUXが使用されます。

  7. 「ジョブ・パラメータ」の下の「ジョブ名」フィールドにジョブの名前を入力します。

    または、データベースによって生成される名前を使用することもできます。

  8. 「スケジュール」で、次のいずれかの操作を行います。

    • 「即時」を選択し、発行直後にジョブを実行します。

    • 「後で」を選択し、「タイムゾーン」「日付」および「時間」フィールドで値を選択するか入力して、指定した時間にジョブを実行します。

  9. 「OK」をクリックします。

    「SQLチューニング・セット」ページが表示されます。

    ジョブが正常に作成されたことを示す確認メッセージが表示されます。

  10. 任意のメカニズム(Oracle Data Pumpやデータベース・リンクなど)を使用して、別のシステムにエクスポート・ファイルを転送します。

SQLチューニング・セットのインポート

SQLチューニング・セットをインポートする前に、SQLチューニング・セットを別のシステムからエクスポートし、それを現在のシステムに転送する必要があります。詳細は、「SQLチューニング・セットのエクスポート」を参照してください。

SQLチューニング・セットのインポート手順: 

  1. 「データベース・パフォーマンス」ページの「その他の監視リンク」で、「SQLチューニング・セット」をクリックします。

    「SQLチューニング・セット」ページが表示されます。

  2. 「インポート」をクリックします。

    「SQLチューニング・セットのインポート」ページが表示されます。

  3. 「ディレクトリ・オブジェクト」で、インポートするファイルを含むディレクトリを選択します。

    ディレクトリには、現在のシステムに転送したエクスポート・ファイルが含まれます。たとえば、ファイルがデータ・ポンプ・ディレクトリに存在する場合、DATA_PUMP_DIRを選択します。「ディレクトリ名」フィールドで自動的にリフレッシュされ、選択したディレクトリが表示されます。

  4. 「インポート・ファイル」フィールドにインポートするダンプ・ファイルの名前を入力します。

  5. 「ログ・ファイル」フィールドにインポート操作のログ・ファイルの名前を入力します。

  6. 既存のSQLチューニング・セットをインポート中のSQLチューニング・セットと置き換えるには、「既存のSQLチューニング・セットと置き換えてください(存在する場合)。」を選択します。

  7. 表領域を選択して、インポート操作のデータを一時的に格納します。

    デフォルトでは、SYSAUXが使用されます。

  8. 「ジョブ・パラメータ」の下の「ジョブ名」フィールドにジョブの名前を入力します。

    または、システムによって生成される名前を使用することもできます。

  9. 「スケジュール」で、次のいずれかの操作を行います。

    • 「即時」を選択し、発行直後にジョブを実行します。

    • 「後で」を選択し、「タイムゾーン」「日付」および「時間」フィールドで値を選択するか入力して、指定した時間にジョブを実行します。

  10. 「OK」をクリックします。

    「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プロファイルの有効化、無効化または削除手順

  1. 「パフォーマンス」ページで「トップ・アクティビティ」をクリックします。

    「トップ・アクティビティ」ページが表示されます。

  2. 「上位SQL」で、SQLプロファイルを使用中のSQL文の「SQL ID」リンクをクリックします。

    「SQLの詳細」ページが表示されます。

  3. 「計画管理」タブをクリックします。

    SQLプロファイルのリストが「SQLプロファイル」および「アウトライン」の下に表示されます。

  4. 管理するSQLプロファイルを選択します。次のいずれかの操作を行います。

    • 無効になっているSQLプロファイルを有効化するには、「有効化/無効化」をクリックします。

    • 有効になっているSQLプロファイルを無効化するには、「有効化/無効化」をクリックします。

    • SQLプロファイルを削除する場合は、「削除」をクリックします。

    確認ページが表示されます。

  5. 「はい」をクリックして続行するか、「いいえ」をクリックしてアクションを取り消します。


参照:

APIを使用してSQLプロファイルを管理する方法については、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

SQL実行計画の管理

SQL計画の管理は、SQL文の実行計画を長期にわたって記録および評価する予防的なメカニズムです。データベースによって、効率的な計画のセットで構成されたSQL計画ベースラインが構築されます。同じSQL文が繰り返し実行される場合、およびオプティマイザによってベースラインとは異なる新しい計画が生成される場合は、データベースによって新しい計画とベースラインが比較され、適切な方が選択されます。

SQL計画管理によって、SQLのパフォーマンス低下が回避されます。新しいオプティマイザ統計、初期化パラメータの変更、データベースのアップグレードなどのイベントによって、実行計画に変更が発生する場合があります。これらの変更によって、SQLのパフォーマンスが低下する可能性があり、このようなパフォーマンスの低下を手動で修正することは困難であり、時間もかかります。SQL計画ベースラインによって、データベースで発生する変更に関係なく、SQL文のパフォーマンスが保持されます。

データベースが自動的にSQL計画ベースラインを取得するようにするか、または手動でSQL実行計画をロードできます。

自動的にSQL計画ベースラインを取得するには: 

  1. データベース・ホームページにアクセスします。

    詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

  2. 「パフォーマンス」「SQL」「SQL計画管理」を選択します。

    「データベース・ログイン」ページが表示されたら、管理者権限のあるユーザーとしてログインします。「SQL計画管理」ページの「SQLプロファイル」サブページが表示されます。

  3. 「SQL計画ベースライン」をクリックします。

    「SQL計画ベースライン」サブページが表示されます。

    sql_plan_control.gifの説明が続きます。
    sql_plan_control.gifの説明

  4. 「設定」で、「SQL計画ベースラインの取得」の隣にあるリンクをクリックします。

    「初期化パラメータ」ページが表示されます。

  5. 表の「値」列で、「TRUE」を選択して「OK」をクリックします。

    「SQL計画ベースライン」サブページに戻ります。 「SQL計画ベースラインの取得」「TRUE」に設定されています。

    取得されるベースラインが構成されたため、データベースでは2回以上実行されたすべてのSQL文の実行計画の履歴が自動的に保持されます。

SQL実行計画を手動でロードするには、SQLベースラインの取得の設定を「FALSE」にする必要があります。

手動でSQL実行計画をロードするには: 

  1. データベース・ホームページにアクセスします。

    詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

  2. 「パフォーマンス」「SQL」「SQL計画管理」を選択します。

  3. 「SQL計画ベースライン」をクリックします。

    「SQL計画ベースライン」サブページが表示されます。

  4. 「ロード」をクリックします。

    「SQL計画管理」ページが表示されます。

    sql_plan_load.gifの説明が続きます。
    sql_plan_load.gifの説明

  5. ロードするSQL計画ベースラインを選択します。次の手順を実行します。

    1. 「SQL計画ベースラインのロード」で、「SQLチューニング・セット(STS)からの計画のロード」を選択します。

      この例では、「SQLチューニング・セットの作成」で作成したSQLチューニング・セットから計画をロードします。

    2. 「ジョブ名」で、ジョブの名前を入力します。たとえば、SPM_LOAD_TESTと入力します。

    3. 「スケジュール」で「即時」を選択します。

    4. 「OK」をクリックします。

    「SQL計画管理」ページの「SQLプロファイル」サブページが表示されます。

    表には、SQL計画ベースラインとして格納されるSQL計画のリストが表示されます。

    sql_baselines.gifの説明が続きます。
    sql_baselines.gifの説明

  6. オプションで、データベースが別のSQL計画ベースラインを使用しないようにベースラインの実行計画を修正します。次の手順を実行します。

    1. 未修正のSQL計画ベースラインを選択します。

    2. ベースライン表の前にあるリストから「修正済 - はい」を選択します。

    3. 「実行」をクリックします。

    表がリフレッシュされ、「固定」列の値がYESのSQL実行計画が表示されます。


参照:

  • SQL計画管理の使用方法については、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。