ステップ1:遅いSQLを特定する
以下のツールを使用して、時間消費やリソース(メモリ、ディスクI/Oなど)を大量に消費するSQLを初期検索します:
- グローバルSQL監査テーブル:
(G)V$OB_SQL_AUDIT - SQL Trace
- 計画キャッシュビュー
例:特定の期間内に実行時間が上位Nにランクインしたリクエストの照会
SQLパフォーマンス分析の詳細については、次のドキュメントを参照してください:SQL実行パフォーマンスの監視
ステップ2:実行計画を分析する
単一のSQLの実行パフォーマンスは、実行計画と密接に関連しています。以下の手順で実行計画を分析します:
- 論理実行計画を確認する:
EXPALINコマンドを実行して、オプティマイザーが生成した実行計画を取得します。 - チューニングの方向性を決定する:実行計画内の操作タイプ(フルスキャン、インデックス選択など)に基づいて、最適化の方向性を判断します。
実行計画の詳細については、次のドキュメントを参照してください:SQL実行計画の概要
ステップ3:統計情報を収集する
SQLに関連するテーブル、列、述語などのオブジェクトの統計情報を収集します。
重要な役割:統計情報は、コストモデルが最適な実行計画を選択するための主要な根拠となります。オプティマイザーは統計情報を用いて計画選択戦略を最適化できます。
詳細については、次のドキュメントを参照してください:統計情報の収集
ステップ4:具体的なチューニング手法
具体的な遅いSQLに対して、以下の方法で実行時間またはリソース消費を最適化します:
クエリの書き換え
SQLを等価な形に書き換えて、最適な実行計画を生成します。
詳細については、次のドキュメントを参照してください:クエリの書き換え
複数テーブル結合の最適化
複数のテーブルにアクセスするSQLについては、以下の結合最適化の方向性に注意が必要です:
- アクセスパスの最適化:より効率的なテーブルアクセス方式(インデックススキャン vs フルスキャンなど)を選択します
- 結合順序の調整:中間結果セットを削減するために、テーブルの結合順序を最適化します
- 結合アルゴリズムの選択:データの分布に基づいて適切な結合アルゴリズム(Hash Join、Nested Loopなど)を選択します
詳細については、次のドキュメントを参照してください: