Oracle DatabaseのSQL Tuning Advisorとは?SQLのチューニング案・推奨事項と使い方を解説

Oracle

Oracle Databaseには、SQL文のパフォーマンスを分析し、改善につながる推奨事項を提示するSQL Tuning Advisor(SQLチューニング・アドバイザ)という機能があります。処理時間の長いSQLや負荷の高いSQLについて、Oracle Database自身のオプティマイザを利用した詳細な分析を行えるのが特徴です。

SQL Tuning Advisorは単に「このSQLは遅い」と知らせる機能ではありません。SQL Profileの作成、統計情報の収集、アクセス・パスに関する改善など、分析結果に応じた推奨事項を提示することがあります。ただし、提示された内容を無条件に適用すればよいわけではなく、ライセンス条件や本番環境への影響を確認したうえで利用することが重要です。

この記事では、SQL Tuning Advisorで何ができるのか、どのようなチューニング案が提示されるのか、基本的な実行方法、SQL Access Advisorとの違い、利用時の注意点まで整理して解説します。

SQL Tuning Advisorとは

SQL Tuning Advisorは、Oracle Databaseに搭載されているSQLチューニング支援機能です。対象となるSQL文に対してSQLオプティマイザによる詳細な分析を実行し、パフォーマンス改善につながる可能性のある推奨事項をレポートとして提示します。

通常のSQL最適化では、SQL文を実行するときにオプティマイザが限られた時間の中で実行計画を決定します。一方、SQL Tuning Advisorでは、チューニングを目的としてより詳細な分析を行い、改善の可能性を探ります。

つまりSQL Tuning Advisorは、Oracle Databaseが対象SQLを分析して「このような対策を検討すると改善できる可能性がある」という情報を提示するための機能です。

SQL Tuning Advisorが提示する主なチューニング案

SQL Tuning Advisorの分析結果は対象SQLやデータベースの状態によって異なります。必ず特定の推奨事項が出るわけではありませんが、代表的なものとしてSQL Profile、オブジェクト統計、アクセス・パス、SQL構造などに関する指摘があります。

分析・推奨の種類 概要
SQL Profile オプティマイザがより適切な実行計画を選択できるようにする補助情報
統計情報 不足・古い統計情報などに関する指摘
アクセス・パス 索引などによってアクセス方法を改善できる可能性の検討
SQL構造 SQL文そのものを変更することで改善できる可能性の提示

例えばオプティマイザの見積もりが実態と大きく異なっており、より適切な実行計画を選択できる余地がある場合には、SQL Profileが推奨されることがあります。

一方、分析しても有効な改善策が見つからなければ、期待していたような推奨事項が提示されないこともあります。「SQL Tuning Advisorを実行すれば必ず高速化できる」という機能ではない点には注意が必要です。

SQL Profileとは何か

SQL Tuning Advisorを理解するときに重要になるのがSQL Profileです。SQL Profileは、対象SQLについてオプティマイザがより適切な実行計画を選択するために利用できる補助的な情報です。

SQL Tuning Advisorの分析によってSQL Profileの利用が有効と判断された場合、レポートに推奨事項として表示されることがあります。推奨されたSQL Profileを受け入れることで、SQL文自体を書き換えなくても実行計画が改善される可能性があります。

ただし、SQL Profileは「特定の実行計画をそのまま固定する仕組み」と単純に考えるのは適切ではありません。実際に採用される実行計画については、適用前後で実行計画や処理時間、I/O、CPU負荷などを確認することが重要です。

SQL Tuning Advisorの基本的な使い方

SQL Tuning Advisorは管理ツールから利用できるほか、PL/SQLのDBMS_SQLTUNEパッケージを使用してチューニング・タスクを作成・実行する方法があります。

SQL IDが分かっており、カーソル・キャッシュ上のSQLを対象にする場合には、環境や権限などの条件を満たしたうえで、概念的には次のような流れでチューニング・タスクを作成できます。

DECLARE
  l_task_name VARCHAR2(100);
BEGIN
  l_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(
    sql_id     => '対象のSQL_ID',
    scope      => DBMS_SQLTUNE.SCOPE_COMPREHENSIVE,
    time_limit => 60,
    task_name  => 'my_sql_tuning_task'
  );
END;
/

タスクを作成したら、次のように実行します。

BEGIN
  DBMS_SQLTUNE.EXECUTE_TUNING_TASK(
    task_name => 'my_sql_tuning_task'
  );
END;
/

分析完了後は、REPORT_TUNING_TASKを利用して結果を確認できます。

SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK(
  'my_sql_tuning_task'
)
FROM dual;

レポートには分析結果や推奨事項、その根拠、期待される改善効果に関する情報などが表示される場合があります。実際の操作では利用しているOracle Databaseのバージョン、権限、エディション、ライセンス条件を確認してください。

SQL Tuning Advisorのレポートはどう読む?

SQL Tuning Advisorの結果を見る際は、「Recommendation(推奨事項)」だけを見るのではなく、その前提となるFinding(分析で判明した事項)やRationale(理由)なども確認することが大切です。

例えばSQL Profileが推奨された場合には、なぜ改善が期待できるのかを確認します。統計情報に関する推奨が出ているなら、現在の統計情報が実際のデータ分布を適切に表しているかも確認します。

特に本番環境では、推奨事項を見つけてすぐ適用するのではなく、現状測定 → 推奨内容の確認 → テスト環境などで検証 → 適用 → 適用後の再測定という流れにすると安全です。

SQL Tuning AdvisorとSQL Access Advisorの違い

Oracle Databaseには似た名称のSQL Access Advisorもあるため、SQL Tuning Advisorとの違いを把握しておくと理解しやすくなります。

SQL Tuning AdvisorはSQL文を詳細に分析し、個々のSQLの性能改善につながる推奨事項を探す用途で利用されます。一方、SQL Access Advisorはワークロードを分析し、索引やマテリアライズド・ビューなどのアクセス構造について検討する用途があります。

機能 主な目的
SQL Tuning Advisor SQL文を詳細分析して性能改善案を提示する
SQL Access Advisor ワークロードを基にアクセス構造などの改善を検討する

「特定のSQLが遅いので原因と改善策を調べたい」というケースではSQL Tuning Advisorが候補になります。一方、多数のSQLを含むワークロードを踏まえて索引などの設計を検討したい場合には、目的に応じた別のAdvisorも検討します。

自動SQLチューニングとの関係

Oracle Databaseには、メンテナンス・ウィンドウなどを利用して高負荷SQLを分析する自動SQLチューニングの仕組みもあります。SQL Tuning Advisorの技術は、このような自動的なチューニング機能とも関係しています。

そのため、DBAが特定のSQLについて手動でSQL Tuning Advisorを実行する方法だけでなく、環境によってはOracle Database側の自動タスクからチューニング情報を得られる場合があります。

ただし、自動機能の有効・無効、実行内容、利用可能な機能はデータベースの構成やライセンスによって異なります。運用中のシステムでは、現在の設定を確認してから利用することが重要です。

SQL Tuning Advisorを使う前に確認したいこと

SQL Tuning Advisorは便利な機能ですが、利用可能なOracle Databaseのエディションやオプション、ライセンス条件には注意が必要です。特にOracle Databaseのチューニング関連機能にはOracle Tuning Packなどのライセンス条件が関係する場合があります。

本番環境や企業システムで使用する場合は、「機能として実行できるか」だけで判断せず、自社の契約で利用が許可されているかを確認してください。ライセンス条件は製品バージョンや契約内容によって確認すべき事項が変わる可能性があります。

また、Advisorの利用には適切な権限も必要です。権限不足で実行できない場合には、無理に権限を追加するのではなく、データベース管理者へ確認するのが安全です。

推奨されたチューニング案をそのまま適用してよいとは限らない

SQL Tuning Advisorの結果は有力な判断材料になりますが、あくまでデータベースの状態や統計情報などを基にした分析結果です。推奨事項を適用した結果、対象SQL以外の運用面に影響が生じる可能性まで含めて検討する必要があります。

例えば新しい索引を検討する場合、SELECTが高速化してもINSERT、UPDATE、DELETE時の索引メンテナンス負荷やストレージ使用量が増える可能性があります。SQL Profileについても、適用前後の実行計画と実測値を比較することが重要です。

そのため、SQLチューニングではAdvisorの提案だけでなく、実行計画、実行統計、待機イベント、データ量、統計情報、アプリケーション側の処理なども合わせて調査すると、より確実な判断につながります。

SQL Tuning Advisorが特に役立つ場面

SQL Tuning Advisorは、処理時間が長いSQLが見つかったものの、実行計画を見ただけでは改善方法を判断しにくい場合に役立ちます。また、SQL文を簡単には変更できない既存システムで、改善の手掛かりを探したい場合にも候補になります。

例えば「昨日まで問題なかった検索処理が最近遅くなった」「大量データを検索する特定SQLだけCPU負荷が高い」といったケースでは、まず実際に負荷の原因となっているSQLを特定し、そのSQLについて詳細分析を行うという流れが考えられます。

一方で、アプリケーションが不要なSQLを数千回発行しているようなケースでは、1回のSQLを高速化するよりアプリケーション設計を改善したほうが効果的な場合もあります。Advisorは万能な自動修復機能ではなく、問題解決を支援するツールとして使うのが適切です。

まとめ:SQL Tuning AdvisorはSQLを分析して改善案を提示する機能

Oracle DatabaseのSQL Tuning Advisorは、対象となるSQLを詳細に分析し、パフォーマンス改善につながる推奨事項を提示するための機能です。分析結果によってはSQL Profile、統計情報、アクセス・パス、SQL構造などに関する提案を確認できます。

DBMS_SQLTUNEを利用すれば、チューニング・タスクの作成、実行、レポート取得という流れで特定SQLを分析できます。ただし、SQL Tuning Advisorを実行すれば必ず改善案が見つかるわけではなく、提案された内容も実環境で検証してから採用することが大切です。

また、Oracle Databaseの高度なチューニング機能ではライセンス条件が非常に重要です。実務で利用するときは契約内容と対象バージョンの公式ドキュメントを確認したうえで、実行計画や実測値と組み合わせてSQL性能改善に活用するとよいでしょう。

コメント

タイトルとURLをコピーしました