Oracle Database 2日でパフォーマンス・チューニング・ガイド 11g リリース1(11.1) E05744-02 |
|
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文を手動でチューニングできる以外に、Oracle DatabaseではSQLチューニング・レポートが自動で生成されます。自動SQLチューニングは自動化メンテナンス・タスクとしてシステムのメンテナンス時に実行され、高負荷SQL文の実行計画を改善する方法を検索します。
第9章「高負荷のSQL文の識別」で説明されているとおり、ADDMは自動的に高負荷のSQL文を識別します。この場合は、「SQLチューニング・アドバイザのスケジュール」または「SQLチューニング・アドバイザの実行」をクリックし、SQLチューニング・アドバイザを起動します。
「セントラル・アドバイザ」ページが表示されます。
「SQLアドバイザ」ページが表示されます。
「SQLチューニング・アドバイザのスケジュール」ページが表示されます。
指定がない場合は、システムで生成された名前が使用されます。
「トップ・アクティビティ」ページが表示されます。
「上位SQL」で、チューニングするSQL文を選択し、「SQLチューニング・アドバイザのスケジュール」をクリックします。「トップ・アクティビティ」ページを使用した高負荷SQL文の識別の詳細は、「上位SQLに基づく高負荷SQL文の識別」を参照してください。
「履歴SQL(AWR)」ページが表示されます。
「履歴SQL(AWR)」で、グラフの下の範囲をクリックし、データベースで実行されたSQL文を表示する時間に対して24時間間隔を選択します。「選択した24時間間隔の詳細」で、チューニングするSQL文を選択し、「SQLチューニング・アドバイザのスケジュール」をクリックします。
「SQLチューニング・セット」ページが表示されます。
チューニングするSQL文を含んだSQLチューニング・セットを選択し、「SQLチューニング・アドバイザのスケジュール」をクリックします。SQLチューニング・セットの作成の詳細は、「SQLチューニング・セットの作成」を参照してください。
「SQLチューニング・アドバイザのスケジュール」ページが表示されます。
有効範囲を制限すると、約1秒で各SQL文がチューニングされますが、SQLプロファイルは推奨されません。
包括的な有効範囲で完全な分析が実行され、該当する場合は、SQLプロファイルが推奨されますが、長い時間がかかる可能性があります。設定した時間制限が少なすぎると推奨事項の質に影響を及ぼすことに注意してください。
包括モードでSQLチューニング・アドバイザのタスクを実行すると、単一のSQL文のチューニングに数分かかります。毎回問合せをハード解析する必要があるため、このモードは時間集中型であり、またリソース集中型でもあります。したがって、システム全体に重大な影響のある高負荷SQL文に対してのみ包括的な有効範囲を使用します。
SQLプロファイルの詳細は、「SQLプロファイルの管理」を参照してください。
「SQLチューニング結果」ページが表示されます。実装する推奨事項を選択して「表示」をクリックします。
次の手順に進みます。
各アドバイザの実行結果はデータベースに保存され、後から参照できます。このデータはAWRの消去プロセスによって削除されるポイントに達して期限切れになるまで保存されます。
「SQL IDの推奨」ページが表示されます。
SQLチューニング・セットを使用した場合、複数の推奨事項が表示されます。推奨事項を実装するかどうか判断しやすくするため、「ベネフィット(%)」列に推奨事項の実装の予測される利点が表示されます。「論理」列には、推奨事項が作成される理由の説明が表示されます。
実行計画の表示の詳細は、「SQL実行計画の表示」を参照してください。
「SQLチューニング結果」ページが表示され、推奨されたアクションが完了したことが確認されます。
自動ワークロード・リポジトリ(AWR)に格納された情報を分析することにより、実行する必要のあるルーチン・メンテナンス・タスクが識別されます。自動化メンテナンス・タスクのインフラストラクチャ(AutoTaskと呼ばれます)により、これらのタスクがメンテナンス・ウィンドウであるOracle Schedulerの期間で実行されるようにスケジュールされます。デフォルトでは、1つのウィンドウが週の各曜日にスケジュールされます。これらのメンテナンス・ウィンドウの属性(開始と終了の時間、頻度および曜日を含む)をカスタマイズできます。
AutoTaskにより、メンテナンス・ウィンドウの間に実行されるようにSQLチューニング・アドバイザが自動的にスケジュールされます。監視された高負荷SQL文におけるSQLチューニング・アドバイザの自動実行の結果を表示できます。
「セントラル・アドバイザ」ページが表示されます。
「SQLアドバイザ」ページが表示されます。
「自動SQLチューニング結果のサマリー」ページが表示されます。
ページの上部半分には、SQLチューニング・タスクのステータスおよびアクティビティのサマリーのセクションがあります。
「自動SQLチューニング結果のサマリー」ページの下部半分には、全体タスクおよびプロファイル効果の統計が表示されます。
「チューニング済SQLのDB時間ベネフィット」グラフでは、自動的に実装されたSQLプロファイルによって保存されている週当たりのDB時間が見積もられます。このグラフには、他の推奨SQLプロファイルが実装された場合に保存される時間も表示されます。たとえば、「実装済」セットの「前」バーには、プロファイルが実装されているすべてのSQL文に対してチューニングを行う前の週のDB時間が集計されます。「後」バーでは、テスト実行で発見された利点に従って各SQL文の時間を短縮して算出された新しい週当たりの累積DB時間が表示されます。つまり、「実装済」セットには、認識されているDB時間の利点が示されるのに対し、「推奨」セットには、SQLチューニング・アドバイザでは自動的に受け入れられなかったプロファイルの潜在的な利点が示されます。
「自動化メンテナンス・タスク構成」ページが表示されます。
このページで、自動SQLチューニング・タスクを有効または無効にでき、実行日を指定できます。「適用」または「元に戻す」をクリックして前のページに戻ります。
「自動SQLチューニング結果の詳細」ページが表示されます。
このページには、SQLチューニングの候補としてデータベースにより自動的に選択されたSQL文がリストされます。
「SQL IDの推奨」ページが表示されます。
このページには、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チューニング・セットを管理できます。
この項では、Oracle Enterprise Managerを使用した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チューニング・セットの作成: フィルタ・オプション」ページが表示されます。
AWRスナップショットで取得されたSQL文をロードできます。これは、後で比較またはチューニングに使用するために、目的の期間の指定したスナップショットに対するSQL文を収集するときに役立ちます。
過去24時間以内にAWRに取得および格納されたスナップショットのみが含まれます。
過去7日間以内にAWRに取得および格納されたスナップショットのみが含まれます。
過去31日間以内にAWRに取得および格納されたスナップショットのみが含まれます。
AWRに取得および格納されたすべてのスナップショットが含まれます。
ユーザーが指定したカスタマイズ済の期間内にAWRに取得および格納されたスナップショットのみ含まれます。
期間の選択ウィンドウが開きます。
この例では、開始時間として2007年3月4日午後9:01の時点のスナップショットが選択され、終了時間として2007年3月5日午前1:00の時点のスナップショットが選択されています。
「SQLチューニング・セットの作成: フィルタ・オプション」ページが表示されます。
AWRベースラインに取得されたSQL文をロードできます。これは、後で比較またはチューニングに使用できる設定済のパフォーマンス・レベルの期間を表すSQL文を収集するときに役立ちます。
「SQLチューニング・セットの作成: フィルタ・オプション」ページが表示されます。
表またはビューからインポートしてSQL文をロードできます。これは、分析するワークロードが現在データベースで実行中ではない場合、または既存のAWRスナップショットまたはAWRベースラインに取得されている場合に役立ちます。
ユーザーが定義する表の名前、または表の数に関して、どのスキーマがワークロードに存在するかに関する制約はありませんが、表形式はUSER_WORKLOAD
表の形式に一致する必要があります。
「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チューニング・セットのエクスポート」ページが表示されます。
たとえば、Oracle Data Pumpディレクトリを使用するには、DATA_PUMP_DIR
を選択します。「ディレクトリ名」フィールドで自動的にリフレッシュされ、選択したディレクトリが表示されます。
または、システムによって生成される名前を使用することもできます。
または、システムによって生成される名前を使用することもできます。
デフォルトでは、SYSAUX
が使用されます。
または、システムによって生成される名前を使用することもできます。
「SQLチューニング・セット」ページが表示されます。
ジョブが正常に作成されたことを示す確認メッセージが表示されます。
SQLチューニング・セットをインポートする前に、SQLチューニング・セットを別のシステムからエクスポートし、それを現在のシステムに転送する必要があります。詳細は、「SQLチューニング・セットのエクスポート」を参照してください。
「SQLチューニング・セット」ページが表示されます。
「SQLチューニング・セットのインポート」ページが表示されます。
ディレクトリには、現在のシステムに転送したエクスポート・ファイルが含まれます。たとえば、ファイルがデータ・ポンプ・ディレクトリに存在する場合、DATA_PUMP_DIR
を選択します。「ディレクトリ名」フィールドで、自動的にリフレッシュされ、選択したディレクトリが表示されます。
デフォルトでは、SYSAUX
が使用されます。
または、システムによって生成される名前を使用することもできます。
「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計画ベースラインが構築されます。同じSQL文が繰り返し実行される場合、およびオプティマイザによってベースラインとは異なる新しい計画が生成される場合は、データベースによって新しい計画とベースラインが比較され、適切な方が選択されます。
新しいオプティマイザ統計、初期化パラメータの値の変更、オプティマイザが変更されるデータベースのアップグレードなどのイベントでは、SQL実行計画に変更が発生する場合があります。これらの変更によって、SQLのパフォーマンスが低下する可能性があり、このようなパフォーマンスの低下を手動で修正することは困難であり、時間もかかります。この対策として、システムで発生する変更に関係なく、対応するSQL文のパフォーマンスが維持されるようにSQL計画ベースラインを修正することができます。
「サーバー」サブページが表示されます。
「SQL計画管理」ページの「SQLプロファイル」サブページが表示されます。
「SQL計画ベースライン」サブページが表示されます。
「初期化パラメータ」ページが表示されます。
「SQL計画ベースライン」サブページに戻ります。「SQL計画ベースラインの取得」は「TRUE」に設定されています。
取得されるベースラインが構成されたため、データベースでは2回以上実行されたすべてのSQL文の実行計画の履歴が自動的に保持されます。
「SQL計画管理」ページが表示されます。
この例では、「SQLチューニング・セットの作成」で作成したSQLチューニング・セットから計画をロードします。
SPM_LOAD_TEST
と入力します。
「SQL計画管理」ページの「SQLプロファイル」サブページが表示されます。表には、SQL計画ベースラインとして格納されるSQL計画のリストが表示されます。
表がリフレッシュされ、「固定」列の値がYES
のSQL実行計画が表示されます。
|
![]() Copyright © 2007, 2008 Oracle Corporation. All Rights Reserved. |
|