リレーショナル・データベース問合せのパフォーマンスのチューニング

多くの顧客は、データ・ウェアハウス・アプリケーションでパフォーマンスの問題を経験しています。Oracle Analyticsによって生成されるSQL問合せは、分析するには複雑なことがあります。このトピックは、Oracle Analyticsによって生成されたSQL問合せから発生する可能性のあるパフォーマンスの問題を分析および最小化する方法のガイドラインを提供します。

このトピックは、ネットワーク、ブラウザまたはレポート表示の問題が原因であるパフォーマンスの問題は対象としていません。

Oracle Analyticsの問合せログの分析(ログ・レベル3が必要)

このログを見つける方法または内容を理解する方法の詳細は、問合せログの収集および分析を参照してください。

  1. Oracle Analyticsで問合せに費やされた時間と、データベースで費やされた時間(レスポンス時間と物理問合せ期間)を比較します。通常、Oracle Analyticsで費やされた時間が数秒を超えることはありません。
  2. レスポンス時間が数秒を超えている場合、Oracle Analyticsで実行された個々のステップを分析して原因を見つけてください(ログ・レベル5が必要)。

物理SQL問合せの分析

  1. 問合せに含まれているすべての表が必要であるかどうかを確認します。結合されているがSELECT句に含まれておらず、フィルタ(結合条件ではなく実際のフィルタ)が適用されていない表を探します。
  2. 生成される物理問合せと副問合せの数を識別します。より正確には、問合せがファクト表を読み取る回数です。理想的な環境では、問合せは1つのファクト表を1回のみ読み取ります。2つ以上のファクト表がある場合、その理由を調べ、いくつかを削除できないかどうかを確認します。
  3. 除外列、非加算集計ルール(REPORT_AGGREGATEcount(distinct)...)、選択ステップ、レポートの副問合せ、集合演算子(UNION)、合計、小計、複数のビューなどを確認します。
  4. 外部結合を確認します。それらの取得元を見つけ、設計を変更していくつかを削除できないかどうかを確認します。

実行計画の分析

SQL問合せの最適化が不十分である場合、実行計画を分析して、パフォーマンスの問題の根本原因を見つけます。データベース管理者(DBA)にサポートを依頼してください。現段階でパフォーマンスを向上するには主に4つの方法があります:
  1. データ・アクセス・パス(索引)を改善することで入出力呼出しの量を削減します。
  2. データ読取りの量を減らすことで入出力呼出しの量を削減します。たとえば、適用済のフィルタまたはデータ・モデル構造を確認できます(次の項を参照)。
  3. 並列度(大規模な表の読取りに使用されるスレッドの数)を増やします。
  4. 入出力呼出しの速度を改善します(インフラストラクチャの改善やインメモリー・データベースなど)。

データ・モデルの確認および改善によるデータ読取り量の削減

  1. 集計表を作成します。
  2. 断片化を使用します。

    たとえば、ユーザーが主に現在の年、四半期または月からデータを選択する場合、ファクトを2つの表(現在とアーカイブ)に分割できます。Oracleデータベースでは、パーティション化も使用できます。

  3. 非正規化を使用して結合の数を減らします。
  4. 表を分割して列の数を減らします。

    データ読取りの量は、単に各表の行数に依存するわけではありません。表の容量はその列の数とサイズにも依存します。たとえば、500の列がある大規模な表を2つの表に分割して、1つの表には最も頻繁に使用される50の列を含め、もう1つの表にはほとんど使用されない残りの450の列を含めることができます。

Oracle Analyticsの多くのパフォーマンス問題は、最適ではないSQL問合せが生成される不適切な設計に由来します。設計を変更することで、Oracle Analyticsによって生成されるSQL問合せを改善できます。これは、レポートのパフォーマンスだけでなく、データベースで使用されるリソースの量にも非常に大きな影響を与える可能性があります。