12 SQL文のチューニング

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

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

問合せオプティマイザはSQL文のチューニングにも役立ちます。SQLチューニング・アドバイザおよびSQLアクセス・アドバイザを使用すると、SQL文またはSQL文のセットを調べるアドバイス・モードで問合せオプティマイザを実行でき、SQL文の効率を向上させる方法が判断されます。SQLチューニング・アドバイザおよびSQLアクセス・アドバイザは、次のような各種の推奨を実行できます。

  • SQLプロファイルの作成

  • SQL文の再構築

  • 追加の索引またはマテリアライズド・ビューの作成

  • オプティマイザ統計のリフレッシュ

また、Oracle Enterprise Manager Cloud Control (Cloud Control)により、簡単に多くのこれらの推奨事項を受け入れて実装できます。

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

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

参照:

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

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

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

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

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

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

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

    詳細は、データベースのホームページのアクセスを参照してください。

  2. 「パフォーマンス」メニューから、「アドバイザ・ホーム」を選択します。

    「データベース・ログイン」ページが表示されたら、管理者権限のあるユーザーとしてログインします。「アドバイザ・セントラル」ページが表示されます。

  3. 「アドバイザ」セクションで、「SQLアドバイザ」をクリックします。「SQLアドバイザ」ページが表示されます。

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

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

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

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

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

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

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

      「上位SQL」の下で、チューニングするSQL文を選択します。

      「アクション」リストで、「SQLチューニング・アドバイザのスケジュール」を選択して、「実行」をクリックします。

      参照:

      「トップ・アクティビティ」ページを使用した高負荷SQL文の識別の詳細は、上位SQLに基づく高負荷SQL文の識別を参照してください。

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

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

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

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

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

      チューニングするSQL文を含んだSQLチューニング・セットを選択し、「SQLチューニング・アドバイザのスケジュール」をクリックします。

      参照:

      SQLチューニング・セットの作成の詳細は、SQLチューニング・セットの作成を参照してください。

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

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

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

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

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

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

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

    参照:

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

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

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

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

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

  10. 「パフォーマンス」メニューから、「アドバイザ・ホーム」を選択します。

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

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

  11. 表からSQLチューニング・アドバイザ・タイプ結果を選択して、「結果の表示」をクリックします。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    詳細は、データベースのホームページのアクセスを参照してください。

  2. 「パフォーマンス」ページから、「アドバイザ・ホーム」を選択します。

    「データベース・ログイン」ページが表示されたら、管理者権限のあるユーザーとしてログインします。「アドバイザ・セントラル」ページが表示されます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    このページには、SQLプロファイルおよび索引に対する推奨事項を含めることができます。

    参照:

    SQLチューニング・アドバイザにより作成された推奨事項の実装方法については、SQLチューニング・アドバイザを使用したSQLの手動チューニングを参照してください。

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

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

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

  • SQL文のセット

  • 関連する実行コンテキストには、次のようなものがあります。

    • ユーザー・スキーマ

    • アプリケーション・モジュール名とアクション

    • バインド値のリスト

    • カーソル・コンパイル環境

  • 関連する基本実行統計には、次のようなものがあります。

    • 経過時間およびCPU時間

    • バッファ読取り

    • ディスク読取り

    • 処理された行

    • カーソル・フェッチ

    • 実行数および完了した実行数

    • オプティマイザ・コスト

    • コマンド・タイプ

  • 各SQL文の関連実行計画と行ソース統計(オプション)

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

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

参照:

データベース間のSQLチューニング・セットの転送の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください

Cloud Controlを使用して、次の方法でSQLチューニング・セットを管理できます。

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

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

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

  1. SQLチューニング・セットに対する初期オプションを指定します(SQLチューニング・セットの作成: オプションを参照)。

  2. SQLチューニング・セットにSQL文を収集してロードするために使用するロード・メソッドを選択します(SQLチューニング・セットの作成: ロード・メソッドを参照)。

  3. SQLチューニング・セットに対するフィルタ・オプションを指定します(SQLチューニング・セットの作成: フィルタ・オプションを参照)。

  4. SQL文を収集してSQLチューニング・セットにロードするために、ジョブをスケジュールおよび発行します(SQLチューニング・セットの作成: スケジュールを参照)。

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

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

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

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

    詳細は、データベースのホームページのアクセスを参照してください。

  2. 「パフォーマンス」メニューから「SQL」を選択し、さらに「SQLチューニング・セット」を選択します。

    「データベース・ログイン」ページが表示されたら、管理者権限のあるユーザーとしてログインします。「SQLチューニング・セット」ページが表示されます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. 「SQLチューニング・セットの作成: ロード・メソッド」ページにアクセスします(SQLチューニング・セットの作成: オプションを参照)。

  2. 「一定期間、カーソル・キャッシュからアクティブなSQL文を取得して追加」を選択します。

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

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

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

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

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

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

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

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

  1. 「SQLチューニング・セットの作成: ロード・メソッド」ページにアクセスします(SQLチューニング・セットの作成: オプションを参照)。

  2. 「SQL文を1度だけロード」を選択します。

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

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

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

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

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

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

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

  1. 「SQLチューニング・セットの作成: ロード・メソッド」ページにアクセスします(SQLチューニング・セットの作成: オプションを参照)。

  2. 「SQL文を1度だけロード」を選択します。

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

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

    • 「すべて」か、「過去24時間」などの時間間隔を選択して、手順6に進みます。

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

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

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

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

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

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

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

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

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

    この例では、開始時間として2011年12月27日午後9時の時点のスナップショットが選択され、終了時間として2011年12月27日午前11時の時点のスナップショットが選択されています。

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

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

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

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

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

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

  1. 「SQLチューニング・セットの作成: ロード・メソッド」ページにアクセスします(SQLチューニング・セットの作成: オプションを参照)。

  2. 「SQL文を1度だけロード」を選択します。

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

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

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

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

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

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

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

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

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

  1. 「SQLチューニング・セットの作成: ロード・メソッド」ページにアクセスします(SQLチューニング・セットの作成: オプションを参照)。

  2. 「SQL文を1度だけロード」を選択します。

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

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

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

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

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

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

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

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

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

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

  1. SQLチューニング・セットを作成し、初期オプションを指定します(SQLチューニング・セットの作成: オプションを参照)。

  2. ロード・メソッドを選択します(SQLチューニング・セットの作成: ロード・メソッドを参照)。

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

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

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

    • スキーマ名の解析

    • SQLテキスト

    • SQL ID

    • 経過時間(秒)

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

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

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

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

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

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

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

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

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

  1. SQLチューニング・セットを作成し、初期オプションを指定します(SQLチューニング・セットの作成: オプションを参照)。

  2. ロード・メソッドを選択します(SQLチューニング・セットの作成: ロード・メソッドを参照)。

  3. フィルタ・オプションを指定します(SQLチューニングセットの作成: フィルタ・オプションを参照)。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    詳細は、データベースのホームページのアクセスを参照してください。

  2. 「パフォーマンス」メニューから「SQL」を選択し、さらに「SQLチューニング・セット」を選択します。

    「データベース・ログイン」ページが表示されたら、管理者権限のあるユーザーとしてログインします。「SQLチューニング・セット」ページが表示されます。

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

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

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

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

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

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

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

この項では、次の項目について説明します。

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

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

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

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

    詳細は、データベースのホームページのアクセスを参照してください。

  2. 「パフォーマンス」メニューから「SQL」を選択し、さらに「SQLチューニング・セット」を選択します。

    「データベース・ログイン」ページが表示されたら、管理者権限のあるユーザーとしてログインします。「SQLチューニング・セット」ページが表示されます。

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

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

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

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

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

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

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

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

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

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

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

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

    オプションで、「説明」フィールドに、チューニング・セットの説明を入力します。

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

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

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

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

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

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

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

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

SQLチューニング・セットをインポートする前に、SQLチューニング・セットを別のシステムからエクスポートし、それを現在のシステムに転送する必要があります。

参照:

詳細は、SQLチューニング・セットのエクスポートを参照してください。

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

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

    詳細は、データベースのホームページのアクセスを参照してください。

  2. 「パフォーマンス」メニューから「SQL」を選択し、さらに「SQLチューニング・セット」を選択します。

    「データベース・ログイン」ページが表示されたら、管理者権限のあるユーザーとしてログインします。「SQLチューニング・セット」ページが表示されます。

  3. 「ファイルからインポート」をクリックします。

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

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

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

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

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

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

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

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

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

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

    オプションで、「説明」フィールドに、チューニング・セットの説明を入力します。

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

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

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

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

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

    ジョブが正常に作成されたことを示す確認メッセージが表示されます。ジョブがすぐに実行するようにスケジュールされている場合、インポートしたSQLチューニング・セットがこのページに表示されます。SQLチューニング・セットが表示されるようリフレッシュする必要がある場合があります。

12.3 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. 「パフォーマンス」メニューから、「トップ・アクティビティ」を選択します。

    「データベース・ログイン」ページが表示されたら、管理者権限のあるユーザーとしてログインします。「トップ・アクティビティ」ページが表示されます。

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

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

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

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

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

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

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

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

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

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

参照:

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

12.4 SQL計画ベースラインの管理

SQL計画管理は、データベースで既知の計画または確認済の計画のみが使用されるようにオプティマイザで実行計画を自動的に管理する予防的なメカニズムです。このコンテキストでは、計画には、オプティマイザが実行計画を再生成する必要のあるすべての計画に関連する情報が含まれています。

SQL計画管理は、SQL計画ベースラインを使用します。SQL計画ベースラインは、SQL文に対してオプティマイザを使用できる一連の確定済の計画です。通常のユースケースの場合、データベースが計画の正常な実行を検証した後のみ、計画がSQL計画ベースラインに確定されます。

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

SQL計画の自動的な取得または計画の手動のロードにより、SQL計画管理で計画を認識します。計画の展開は、オプティマイザが新しい計画を検証して既存のSQL計画ベースラインに追加するプロセスです。この項では、次の項目について説明します。

参照:

12.4.1 SQL計画ベースラインの自動的な取得

Oracle DatabaseによるSQL計画ベースラインの自動的な取得を指定できます。

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

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

    詳細は、データベースのホームページのアクセスを参照してください。

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

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

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

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

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

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

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

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

    ベースラインを自動的に取得するよう構成したため、データベースによって、1回以上実行されたすべてのSQL文にSQL計画ベースラインが作成され、1番目承認済計画としてSQLベースラインに文の現在の実行計画が追加されます。

12.4.2 SQL計画ベースラインの手動のロード

既存の計画をSQL計画ベースラインに手動でロードできます。SQLチューニング・セット(STS)から計画をロードしたり、カーソル・キャッシュから選択した計画をロードできます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

参照:

  • SQL計画ベースライン・サブページの他のオプションの詳細は、Cloud Control状況依存オンライン・ヘルプを参照してください。

12.4.3 SQL計画の展開

通常、SQL文のSQL計画ベースラインは、単一の確定済の計画から開始します。ただし、様々な条件の異なる計画とともに実行されると、SQL文の実行が良くなる場合があります。たとえば、値が異なる選択性になるバインド変数を使用したSQL文は、いくつかの優れた計画を持つ場合があります。マテリアライズド・ビューまたは索引の作成あるいは表の再パーティション化により、現在の計画が他の計画よりコストが高くなる場合があります。

新しい計画がSQL計画ベースラインに一度も追加されなかった場合、一部のSQL文のパフォーマンスが低下する可能性があります。したがって、新しく検出された計画を展開し、SQL計画ベースラインを追加する必要があるかどうかを確認する必要があります。計画の展開は、SQL計画ベースラインに含める前に新しい計画のパフォーマンスを検証して、パフォーマンスの低下を防止します。

計画の展開は、次の個別のステップで構成されます。

  1. 確定されていない計画がSQL計画ベースラインの確定済の計画と少なくとも同じパフォーマンスであることを確認します。

  2. 以前の確定済の計画と同じパフォーマンスであることが証明された場合、計画履歴の確定されていない計画を確定済の計画として計画ベースラインに追加します。

手動で計画を展開するか、SQL計画管理(SPM)展開アドバイザを使用できます。

デフォルトでは、SPM展開アドバイザは、スケジュールされているメンテナンス・ウィンドウで毎日実行されます。すべての承認されていない計画をランク付けし、ウィンドウの実行中にできるだけ多くの計画のテスト実行を行います。展開アドバイザは、SQL計画ベースラインの最もコストの低い承認済計画を選択し、確定されていない各計画と比較します。計画が既存の承認済の計画よりもパフォーマンスが高い場合、データベースが自動的に承認します。

参照:

計画を手動で展開するには、次のステップを実行します。

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

    詳細は、データベースのホームページのアクセスを参照してください。

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

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

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

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

  4. 表で、「確定済」列に「いいえ」がある1つ以上のSQL計画を選択し、「展開」をクリックします。

    SQL計画ベースラインの展開ページが表示されます。

  5. 実行するオプションを指定します。

    • 「パフォーマンスの検証」で、次のいずれかを選択します。

      • データベースで計画が現在のベースライン計画と同じまたはそれ以上のパフォーマンスであるかを検証するには、「はい」を選択します。

      • 実行方法に関係なく計画を自動的に展開するには、「いいえ」を選択します。

    • 「時間制限」で、次のいずれかを選択します。

      • データベースで確定されていない計画のパフォーマンスを検証する期間を決定する「自動」

      • 実行時間に関係なく完了まで検証を実行する「無制限」

      • 検証プロセスの時間制限を指定する「指定」。関連するフィールドに分単位の値を入力します。

    • 「アクション」で、次のいずれかを選択します。

      • データベースで計画を確定してレポートを作成する「レポートして承認」

      • データベースでレポートを作成して計画を確定しない「レポートのみ」

    オプションを実装するには、「OK」をクリックします。

    レポートが表示されます。レポートを表示した後、「戻る」をクリックしてSQL計画ベースライン・サブページに戻ります。