ヘッダーをスキップ

Oracle Database 2日でパフォーマンス・チューニング・ガイド
11g リリース1(11.1)

E05744-02
目次
目次
索引
索引

戻る 次へ

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チューニング・アドバイザを実行すると有効です。

SQL文を手動でチューニングできる以外に、Oracle DatabaseではSQLチューニング・レポートが自動で生成されます。自動SQLチューニングは自動化メンテナンス・タスクとしてシステムのメンテナンス時に実行され、高負荷SQL文の実行計画を改善する方法を検索します。

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

第9章「高負荷のSQL文の識別」で説明されているとおり、ADDMは自動的に高負荷のSQL文を識別します。この場合は、「SQLチューニング・アドバイザのスケジュール」または「SQLチューニング・アドバイザの実行」をクリックし、SQLチューニング・アドバイザを起動します。

SQLチューニング・アドバイザを使用したSQL文のチューニング手順:
  1. データベースのホームページの「関連リンク」で、「セントラル・アドバイザ」をクリックします。

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

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

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

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

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


    画像の説明

  4. 「名前」フィールドに、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文」を開きます。


    画像の説明

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

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

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

    • 「包括」を選択し、「文ごとの時間制限」に各SQL文に対する時間制限(分単位)を設定し、また「合計時間の制限」に合計の時間制限(分単位)を設定します。

      包括的な有効範囲で完全な分析が実行され、該当する場合は、SQLプロファイルが推奨されますが、長い時間がかかる可能性があります。設定した時間制限が少なすぎると推奨事項の質に影響を及ぼすことに注意してください。

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


      画像の説明

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

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

    • 「即時」を選択してSQLチューニング・タスクをすぐに実行し、「SQLチューニング結果」ページが表示された後、手順10に進みます。

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


      画像の説明

  9. オプションで、「セントラル・アドバイザ」ページで次のいずれかの操作を行います。

    • SQLチューニング・タスクの完了後にその結果を表示するには、そのSQLチューニング・アドバイザ・タスクを選択し、「結果の表示」をクリックします。

      「SQLチューニング結果」ページが表示されます。実装する推奨事項を選択して「表示」をクリックします。

      次の手順に進みます。

    • SQLチューニング・タスクを削除するには、SQLチューニング・アドバイザのタスクを選択して「削除」をクリックします。

    • SQLチューニング・タスクを再スケジュールするには、「SQLチューニング・アドバイザのタスク」を選択します。「アクション」リストから、「再スケジュール」を選択し、「実行」をクリックします。

    • 実行中のSQLチューニング・タスクに割り込むには、「SQLチューニング・アドバイザのタスク」を選択します。「アクション」リストから、「割込み」を選択して「実行」をクリックします。

    • スケジュール済のSQLチューニング・タスクをキャンセルするには、SQLチューニング・アドバイザのタスクを選択します。「アクション」リストから、「取消」を選択して「実行」をクリックします。

    • SQLチューニング・タスクの期限切れの設定を変更するには、SQLチューニング・アドバイザのタスクを選択します。「アクション」リストから、「有効期限の変更」を選択して「実行」をクリックします。

      各アドバイザの実行結果はデータベースに保存され、後から参照できます。このデータはAWRの消去プロセスによって削除されるポイントに達して期限切れになるまで保存されます。

    • スケジュール済のSQLチューニング・タスクを編集するには、SQLチューニング・アドバイザのタスクを選択します。「アクション」リストから、「編集」を選択して「実行」をクリックします。


      画像の説明

  10. 「SQLチューニング結果」ページで、「表示」をクリックします。

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

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

  11. 複数の推奨事項が表示される場合は、オプションで、次のいずれかの操作を行います。

    • 各SQL文に対する元の計画を表示するには、「元の実行計画」をクリックします。

    • 新しい実行計画と元の実行計画を比較するには、「実行計画の比較」列にあるアイコンをクリックします。

    • 各SQL文に対する新しい計画を表示するには、「新規実行計画」をクリックします。

    実行計画の表示の詳細は、「SQL実行計画の表示」を参照してください。

  12. 推奨事項を実装するには、「実装」をクリックします。


    画像の説明

    「SQLチューニング結果」ページが表示され、推奨されたアクションが完了したことが確認されます。


    画像の説明

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

自動ワークロード・リポジトリ(AWR)に格納された情報を分析することにより、実行する必要のあるルーチン・メンテナンス・タスクが識別されます。自動化メンテナンス・タスクのインフラストラクチャ(AutoTaskと呼ばれます)により、これらのタスクがメンテナンス・ウィンドウであるOracle Schedulerの期間で実行されるようにスケジュールされます。デフォルトでは、1つのウィンドウが週の各曜日にスケジュールされます。これらのメンテナンス・ウィンドウの属性(開始と終了の時間、頻度および曜日を含む)をカスタマイズできます。

AutoTaskにより、メンテナンス・ウィンドウの間に実行されるようにSQLチューニング・アドバイザが自動的にスケジュールされます。監視された高負荷SQL文におけるSQLチューニング・アドバイザの自動実行の結果を表示できます。

自動SQLチューニング結果の表示手順:
  1. データベースのホームページの「関連リンク」で、「セントラル・アドバイザ」をクリックします。

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

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

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

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

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

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


    画像の説明

    「自動SQLチューニング結果のサマリー」ページの下部半分には、全体タスクおよびプロファイル効果の統計が表示されます。


    画像の説明

    「チューニング済SQLのDB時間ベネフィット」グラフでは、自動的に実装されたSQLプロファイルによって保存されている週当たりのDB時間が見積もられます。このグラフには、他の推奨SQLプロファイルが実装された場合に保存される時間も表示されます。たとえば、「実装済」セットの「前」バーには、プロファイルが実装されているすべてのSQL文に対してチューニングを行う前の週のDB時間が集計されます。「後」バーでは、テスト実行で発見された利点に従って各SQL文の時間を短縮して算出された新しい週当たりの累積DB時間が表示されます。つまり、「実装済」セットには、認識されているDB時間の利点が示されるのに対し、「推奨」セットには、SQLチューニング・アドバイザでは自動的に受け入れられなかったプロファイルの潜在的な利点が示されます。

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

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

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

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

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

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


    画像の説明

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

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


    画像の説明

    このページには、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パフォーマンス・チューニング・ガイド』を参照してください。

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

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

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

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

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

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

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

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

SQLチューニング・セットを作成する最初の手順は、名前、所有者および説明などのセットの初期オプションを指定することです。

SQLチューニング・セット作成のオプションの指定手順:
  1. 「データベース・パフォーマンス」ページの「その他の監視リンク」で、「SQLチューニング・セット」をクリックします。

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


    画像の説明

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

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

  3. 「SQLチューニング・セット名」フィールドに、SQLチューニング・セットの名前を入力します。

  4. 「所有者」フィールドに、SQLチューニング・セットの所有者を入力します。

  5. 「説明」フィールドに、SQLチューニング・セットの説明を入力します。


    画像の説明

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

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

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

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

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

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

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

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


    画像の説明

  8. 次の手順に進みます(「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チューニング・セットでの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に進みます。

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

    • 「過去7日間」を選択し、手順5に進みます。

      過去7日間以内にAWRに取得および格納されたスナップショットのみが含まれます。

    • 「過去31日間」を選択し、手順5に進みます。

      過去31日間以内にAWRに取得および格納されたスナップショットのみが含まれます。

    • 「すべて」を選択し、手順5に進みます。

      AWRに取得および格納されたすべてのスナップショットが含まれます。

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

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

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

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


      画像の説明

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

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

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

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

    この例では、開始時間として2007年3月4日午後9:01の時点のスナップショットが選択され、終了時間として2007年3月5日午前1:00の時点のスナップショットが選択されています。


    画像の説明

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

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

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

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

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

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

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

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


    画像の説明

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

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

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

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

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

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

ユーザー定義ワークロードからのSQL文のロード手順:
  1. 「SQLチューニング・セットの作成: ロード・メソッド」ページで、「SQL文を1度だけロード」を選択します。

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

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


    画像の説明

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

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

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

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

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

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

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

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

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

    使用可能なフィルタ条件は次のとおりです。

    • 計画ハッシュ値

    • モジュール

    • アクション

    • バッファ読取り

    • ディスク読取り

    • ディスク書込み

    • 処理された行

    • フェッチ数

    • 実行

    • フェッチ数の終了値

    • コマンド・タイプ

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

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

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

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

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

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

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

ヒント:

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

 

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

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

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

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

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


      画像の説明

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

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


    画像の説明

  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チューニング・セットのエクスポート」ページが表示されます。


    画像の説明

  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プロファイルの有効化、無効化または削除手順:
  1. 「パフォーマンス」ページで「トップ・アクティビティ」をクリックします。

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

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

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

  3. 「チューニング情報」タブをクリックします。

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


    画像の説明

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

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

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

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

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

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

SQL実行計画の管理

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

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

SQL実行計画のロード手順:
  1. データベースのホームページで「サーバー」をクリックします。

    「サーバー」サブページが表示されます。

  2. 「問合せオプティマイザ」で、「SQL計画管理」をクリックします。

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

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

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


    画像の説明

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

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

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

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

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

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

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


    画像の説明

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

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

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

    2. 「ジョブ名」で、ジョブの名前を入力します。この例では、SPM_LOAD_TESTと入力します。

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

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

    「SQL計画管理」ページの「SQLプロファイル」サブページが表示されます。表には、SQL計画ベースラインとして格納されるSQL計画のリストが表示されます。


    画像の説明

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

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

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

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

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

    参照:

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

     


戻る 次へ
Oracle
Copyright © 2007, 2008 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引