SQL問合せのチューニング
問合せのチューニングは、レポートのパフォーマンスの向上のために非常に重要なステップです。
実行計画、SQL監視、TKPROFのSQLトレース機能は、Oracleデータベースで実行されるアプリケーションのSQL問合せのチューニングに役立つ基本的なパフォーマンス診断ツールです。
Publisherには、実行計画およびSQLモニタリング・レポートを生成し、SQLセッション・トレースを可能にするメカニズムが用意されています。この機能は、Oracle Databaseに対して実行されるSQL文にのみ適用されます。その他のタイプのデータベースに対する論理問合せはサポートされていません。
実行計画の生成
単一問合せに対するデータ・レベル、またはレポート内のすべての問合せに対するレポート・レベルで、実行計画を生成できます。
実行計画の解釈に関する詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。
単一問合せの実行計画
実際に問合せを実行する前に、「SQLデータ・セット」の「編集」ダイアログから、実行計画を生成できます。これにより、計画が正確に予測されます。問合せは、null値でバインドして実行されます。
「SQL問合せの編集」ダイアログの「実行計画の生成」をクリックします。生成されたドキュメントを、NotepadまたはWordPadなどのテキスト・エディタで開きます。
問合せのチューニングに関するガイドライン
一連のガイドラインに従って問合せをチューニングします。
-
実行計画を分析し、影響が大きいSQL文を特定します。
-
必要なフィルタ条件を追加し、不要な結合を削除します。
-
大きな表に対するFTS (全表スキャン)を回避および削除します。小さな表に対する全表スキャンの実行は、迅速で問合せのフェッチを改善する場合もあります。小さな表では、キャッシュを使用してください。
-
SQLヒントを使用して、適切な索引を強制的に使用します。
-
複雑なサブ問合せの使用を避け、必要に応じグローバル一時表を使用します。
-
複数の集計でOracle SQL分析機能を使用します。
-
できるかぎり、WHERE句内で大量のサブ問合せの使用を避けます。かわりに、外部結合で問合せをリライトしてください。
-
HAVINGおよびIN / NOT INなどのWHERE句条件でグループ関数の使用を避けます。
-
複雑な集計関数では、CASE文およびDECODE関数を使用します。
データベースのチューニングのヒント
データベースのチューニング時にベスト・プラクティスに従います。
-
データベース管理者と協力して、表の統計を収集します。
-
サーバーの速度が非常に遅い場合、ネットワーク/IO/ディスクの問題を分析し、サーバー・パラメータを最適化します。
-
いくつかのシナリオで、大量のデータのフェッチを回避できない場合、データベースでPGAヒープ・サイズ・エラーが発生する場合があります。これらの問題を解決するために、最終手段としてPGAヒープ・サイズを大きくします。次の文を使用して、ヒープ・サイズを大きくします。
alter session set events '10261 trace name context forever, level 2097152'