本文へスキップ

SQL Plan 分析

ホーム画面 > プロジェクト選択 > 分析 > SQL分析

データベースで実行される SQL 文を分析し、パフォーマンス問題を診断するための有用な情報を提供します。
SQL Plan 分析 は Access Statistics タブと Plan Change History タブで構成されています。

Access Statistics​

Access Statistics タブは、実行計画の保存履歴と SQL 統計を組み合わせ、どの SQL がどの方法でテーブルを読んでいるか、そのうち何を先に対処すべきかを絞り込んでいく画面です。広い期間の推移から異常な区間を選び、その区間の SQL 一覧に降り、選んだ SQL の実行計画とオブジェクト別の寄与度までを1つの画面で続けて確認できます。Oracle・Oracle Pro インスタンスの SQL チューニング対象を選ぶ DBA が対象読者です。

つまり、Full Scan の発生回数を数える画面から、負荷の大きい SQL が何をどのように読んでいるかを絞り込む画面に変わりました。

注意

画面が全面的に再構成されました

従来の Access Count・Operation Count の2つのチャート構成は提供されなくなりました。推移チャートは指標を切り替えられる1つに統合され、その下に Access Type 集計・SQL 一覧・実行計画・オブジェクト要約のパネルが新たに配置されました。

パネルのタイトル、表の列ヘッダー、オプションボタンのラベルは、画面の言語設定に関係なく英語で表示されます。一部の案内文言とファネルのラベルのみが画面の言語に従います。

画面構成​

BlockDescription
照会条件期間・インスタンス・フィルター・集計オプションを1組として設定した後に検索
SQL Count 推移期間全体を時間バケットの棒で表示。棒をドラッグして分析区間を指定
Access Type Summary分析区間の Access Type 別の SQL 数・実行回数・比率
Access Type by SQLSQL 別の Access Type 構成とパフォーマンス指標の一覧
Execution Plan一覧で選んだ SQL の実行計画ツリー
Object Summary選んだ SQL が読むオブジェクト別の要約
ノート

照会期間と分析区間は異なります

推移チャートは照会期間全体を集計で表示し、その下の一覧・実行計画・オブジェクト要約は、チャートで指定した分析区間のみを元の行として照会します。最大3か月分の実行計画ステップを一度に受け取ると応答が成り立たないため、分けた構造です。

画面に初めて入ると、分析区間は直近のバケット1つに設定されます。広げるにはチャートで区間をドラッグして選ぶか、Access Type by SQL パネル上部の期間全体ボタンを選択してください。

照会条件を設定する​

  1. 分析 > SQL Plan 分析 の Access Statistics タブに移動します。

  2. 時間 オプションで照会期間を選択します。既定値は1日で、最大3か月(91日)まで指定できます。

  3. インスタンス オプションで照会するインスタンスを選択します。

  4. 必要に応じて フィルター オプションで条件を追加します。初めて入ると、Access Type = TABLE ACCESS FULL の条件がすでに適用されています。

  5. Exclude system objects スイッチで、システムオブジェクトの照会を一覧から除外するかどうかを決めます。既定値はオンです。

  6. 検索アイコン ボタンをクリックします。

ノート

期間・インスタンス・フィルター・集計オプションは1組であるため、検索ボタンを押して初めてまとめて反映されます。一方、Access Type by SQL パネルの表示制御(並べ替え基準・表示件数・下限・集計基準・列設定)は、すでに受け取ったデータを再計算するだけなので、選択した時点で即座に反映されます。

フィルター条件​

KeyDescription
Access Type実行計画のアクセス方式。例: TABLE ACCESS FULL
Ownerオブジェクトを所有するスキーマ
Object Nameオブジェクト名

条件は等しい(=)と等しくない(!=)の2つの演算子をサポートします。等しくないを使うと、特定のスキーマやオブジェクトを一覧から除外して確認できます。

フィルターは実行計画のステップ単位ではなく、SQL 単位で適用されます。条件に一致するステップを1つでも持つ SQL であれば、その SQL のステップがすべて一覧に残ります。ステップ単位で適用すると、残りのステップが消えて構成比率が実際と異なってしまうためです。

システムオブジェクトの除外​

SYS・SYSTEM・XDB のようなディクショナリスキーマと、X$・V$・DBA_ 接頭辞のオブジェクトのみを読む照会を一覧から除外します。ユーザーオブジェクトに一切触れない照会を再帰 SQL と見なす方式であり、完全な判定ではありません。既定値がオンなのは、FIXED TABLE FULL のようなディクショナリ照会がユーザー SQL を隠す問題を防ぐためです。

SQL Count の推移を見る​

チャート上部の2つのオプションで、何をどの解像度で見るかを選びます。

OptionValueDescription
MetricSQL Count · Executions · Elapsed棒が表す指標。既定値は SQL Count
IntervalHour · Day · Week棒1つが含む時間の幅

Metric を選ぶとパネルのタイトルも併せて変わります。選択した Access Type は母集団を減らさずに全体の棒の上に重ねて描画されるため、全体に対するその種類の割合をそのまま読み取れます。

ノート

Interval Hour は7日までしか選択できません

照会期間が7日を超えると Hour ボタンが無効になり、「7日を超える照会では時間単位で表示できません」という案内が表示されます。7日であれば時間バケットは168個でまだ棒を選べますが、それを超えると区間を選ぶ操作が難しくなるためです。

Interval を選択していない場合や、現在の照会期間で使用できない値の場合は、期間が単位を決めます。2日以下は Hour、それより長い場合は Day です。

分析区間は、棒をクリックするか複数の棒をドラッグして指定します。指定した区間が、下の3つのパネルの照会範囲になります。

Access Type Summary を読む​

分析区間で Access Type 別にどれだけ使われたかを集計します。

ColumnDescription
Access Type実行計画のアクセス方式
SQL Countそのアクセス方式を使用した SQL 数
Executions実行回数の合計
Share実行回数を基準とした比率

1つの SQL が Full Scan と Range Scan を併用している場合は、両方に加算されます。つまり Share は「このアクセス方式を使う SQL が占める割合」として読む値であり、合計が 100% を超えることがあります。

Access Type by SQL の一覧を扱う​

一覧は、SQL と実行計画(sql_id + plan_hash_value)の組み合わせ1行ずつで構成されます。

表示制御​

OptionDefaultDescription
並べ替え基準Logical IOLogical IO・Elapsed・Executions・LIO / exec・Full Steps から選択
表示件数Top 50Top 20 から Top 1,000 まで、No limit も選択可能
Minimum executions0実行回数の下限
Minimum LIO per execution0実行あたりの論理読み取りの下限
BasisRange Total指標の集計基準。Range Total は区間の合算、Latest Plan は最新の実行計画基準

2つの下限値の既定値が 0 なのは、画面に入った直後に一部の SQL が黙って除外されるのを防ぐためです。一覧の長さは表示件数ですでに制限されているため、下限は必要なときに引き上げて絞り込む道具として使ってください。

ファネル表示​

パネル上部に、一覧がどこでどれだけ減ったかを3段階で表示します。

StepDescription
区間内分析区間に入った SQL 数
条件通過フィルターと下限条件を通過した SQL 数
表示表に実際に描画された行数

前の2つの値は SQL 数、最後の値は行数です。行が SQL と実行計画の組み合わせ単位であるため、単位が異なります。

列構成​

GroupColumnDescription
SQLsql_id · plan_hash_value · query_textSQL の識別子と原文
CompositionSteps · Breakdown実行計画のステップ数と Access Type 構成バー
PerformanceExecutions · LIO/exec · Elapsed/exec(s)実行回数と実行あたりの負荷

Access Type の列は、リスクに応じて High Risk・Caution・Normal・Hidden の4つに分かれます。表示する種類は列設定で選ぶことができ、定義表に該当しない残りのステップは Others 列にまとめられます。

既定で有効になる Access Type は次のとおりです。

Access TypeTier
TABLE ACCESS FULLHigh Risk
PARTITION RANGE ALLHigh Risk
INDEX SKIP SCANCaution
INDEX FAST FULL SCANCaution
INDEX FULL SCANCaution
INDEX RANGE SCANNormal
INDEX UNIQUE SCANNormal
TABLE ACCESS BY INDEX ROWIDNormal

TABLE ACCESS STORAGE FULL・BITMAP INDEX・MAT_VIEW ACCESS・HASH JOIN・NESTED LOOPS・MERGE JOIN・FIXED TABLE FULL は既定で非表示であり、列設定で有効にできます。

選んだ SQL を詳しく見る​

一覧で行を選択すると、下の2つのパネルがその SQL の内容で埋められます。

Execution Plan​

ColumnDescription
Operation実行計画のステップ
Objectアクセス対象のオブジェクト
Costオプティマイザーが算出したコスト

Object Summary​

ColumnDescription
Objectオブジェクト名
Access Typeそのオブジェクトを読む方式
Index使用したインデックス
Cost Share全体のコストに占める比率

表は Cost Share の降順で最初に並べ替えられます。負荷に最も寄与するオブジェクトが最上部に来るようにしたもので、列ヘッダーをクリックすると並べ替えを変更できます。

知っておくとよいこと​

  • LIO(Logical IO、論理読み取り)は SQL 単位でのみ実測できます。ステップ別に分けた値は提供されないため、Access Type Summary には LIO の寄与度の列がありません。

  • 推移チャートで Access Type を複数選択すると、重ねて描画した値の合計が全体の棒を超えることがあります。1つの SQL が複数の種類を併用するためで、画面は棒の外に出ないように切り取って表示します。

  • 推移チャートの区間の件数と一覧の行数は、数件の差が生じることがあります。チャートは集計照会から、一覧は同じデータにシステム・再帰の除外条件をさらに適用した結果から得られるため、画面はユーザーが実際に突き合わせる一覧を基準に数値を揃えます。

SQL 詳細情報の確認​

画面の下のSQL一覧でqueryカラム項目を選択するとSQL詳細画面が表示されます。 SQLクエリ文とPlan情報を確認することができます。

SQL統計の表示 → ボタンをクリックすると、選択した SQL クエリに関連する統計情報を確認できる SQL統計 に移動します。

SQL統計

  • Runtime Plan: 選択されたSQLクエリの実行計画とランタイム情報を提供します。 実行回数、平均実行時間、平均物理的読み取りなどの詳細を提供します。

  • Explain Plan: オプティマイザーが予測した実行計画を示します。 費用、作業、オブジェクト名、カーディナリティなどの情報を提供します。

  • Plan History: データベースで実行されたSQLクエリの実行計画に対する履歴を確認できます。

  • Bind Capture: データベースで実行されたSQLクエリに使用されたバインド変数を確認できます。 これにより、クエリ実行の実際の内容を確認できます。

    ノート

    リアルタイムで実行されたbind値ではなく、データベースにキャプチャされた値(v$sql_bind_capture)です。

  • Trend: 選択したSQLの実行指標の推移を、時系列チャートと表で確認できます。実行時間、実行あたりの平均指標、パース回数(total・hard)などの変化を時間順に表示します。

    ノート

    Trendタブに表示される指標の構成は、OracleとOracle Proで異なります。

Bind Captureの値を確認する​

Bind Captureタブのバインド値は、既定でマスクされています。マイナンバーや口座番号のような実際の顧客データが含まれる可能性があるため、照会権限だけでは値を見られないように変更されました。

一覧自体はパラメーターキーなしで照会します。収集時刻と変数名、データ型は機密情報ではないためです。value列のみが******でマスクされます。

ColumnDescription
time収集時刻
last_capturedデータベースがバインド値を最後にキャプチャした時刻
nameバインド変数名
valueバインド値。復号前は******と表示
datatypeバインド変数のデータ型
child_number子カーソル番号

値を確認するには、次の手順に従ってください。

  1. Bind Captureタブ右上のロックボタンをクリックします。

  2. 復号キーの確認ウィンドウが表示されたら、パラメーターキーを入力します。パラメーターキーは、エージェントのインストールパスにあるparamkey.txtファイルで確認できます。

  3. 確認ボタンをクリックします。

キーが正しければウィンドウが閉じ、value列に実際の値が入ります。復号した後も値がダッシュ(-)で表示される行がある場合がありますが、これはエージェントがその変数の値をキャプチャできなかった場合です。マスクされた状態(******)と区別するために表記を分けています。

ノート

ロックボタンが表示されない場合

機密情報照会(SECURITY_READ)権限がないアカウントには、ロックボタンが表示されません。権限についてはプロジェクト管理者にお問い合わせください。

注意

キーを誤って入力した場合

「無効なパラメーターキーです。」という文言とともにparamkey.txtを確認するよう促す案内が入力欄の下に表示され、ウィンドウは閉じません。失敗理由をこれ以上詳しく表示しないのは、リクエストに含まれるキーの値が画面に露出しないようにするためです。

照会期間の途中でパラメーターキーを変更したことがある場合は、「照会期間中にパラメーターキーが変更されたため、一部の値は復号されませんでした。」という案内とともに一部の行のみが埋められます。

復号の照会は一度に最大500行を返します。上限に達した場合、それより多くの値が切り捨てられている可能性があります。

AI チューニングガイド​

AI チューニングガイドは、SQL クエリ、プラン、統計情報を分析してパフォーマンス問題を診断し、最適化の提案を行う機能です。
開発者や DBA がボトルネックの原因を迅速に特定し、効率的な SQL によりパフォーマンスを改善できるよう支援します。

注意

使用条件および注意事項

PostgreSQL、MySQL、SQL Server ではプランの取得が必須です。
プランを取得しない場合、AI チューニングガイドアイコンは 無効な AI チューニングガイドアイコン(無効)として表示され、機能を使用できません。

  • AI が生成する結果は自動分析に基づいており、精度が 100% ではないことにご留意ください。
  1. 分析および診断する SQL をクリックし、SQL詳細 画面に移動します。

  2. SQL詳細 画面の右下にある AI チューニングガイドアイコン AI チューニングガイドアイコン をクリックして AI 分析を開始します。

  3. AI 分析結果を確認します。

    結果項目説明
    クエリプランおよび概要クエリの目的と実行概要を表示します。
    実行回数、累積実行時間、データベース全体の負荷比率を分析し、当該 SQL がシステムパフォーマンスに与える影響を評価します。
    パフォーマンス分析分析結果を総合し、パフォーマンススコアと診断結果を提供します。
    CPU 使用率、ディスク使用率、キャッシュヒット率、待機時間など、クエリ実行過程における詳細なリソース使用量を分析し、ボトルネックの発生区間を視覚的に表示します。
    発見された主な問題主な問題点を要約して表示します。
    最適化推奨事項検出された問題に基づき、最適化されたクエリを提案します。

Plan Change History​

Plan Change History タブでは、同じ SQL ID でも実行計画が変更されるとパフォーマンスに影響を与える可能性があります。
オプティマイザーによるプラン変更を検知・監視することで、不要な変更を防ぎ、SQL パフォーマンスの一貫性を維持できます。

  1. 分析 > SQL Plan 分析 の Plan Change Historys タブに移動します。

  2. 照会時間とインスタンスを選択します。

  3. 時間 および インスタンス オプションを設定し、検索アイコン ボタンをクリックします。

  4. Plan Change Count セクションで特定の時間帯を選択すると、その時間に発生したプラン変更の一覧が表示されます。

    • Plan Change Count セクション: 時間帯ごとに発生したプラン変更の回数を確認できる棒グラフチャートです。

Plan変更事項を確認する​

  1. SQL Plan 分析 の Plan Change Historys タブの一覧から特定の変更項目をクリックします。

  2. Query セクションに、プラン変更前後の詳細が表示されます。
    プランの差分を比較して、パフォーマンス変化の原因を特定できます。

    • Query セクションの右上にある 新しいウィンドウアイコン ボタンをクリックすると、そのセクションを新しいウィンドウで確認できます。
  3. Query セクションを閉じるには、右上の 閉じるア��イコン ボタンをクリックします。

参照結果フィルタリング​

照会結果は次の基準でフィルタリングできます。

  • sql_id

  • sql_hash_value

  • after_plan_hash_value

  • before_plan_hash_value

フィルター条件を追加する​

  1. フィルターオプションでボタンを選択します。

  2. フィルターキー項目で目的のフィルタリング基準を選択します。

    • 選択した項目の値が文字に該当する場合は含む(青)、含まない(赤) の条件を選択できます。

      example

    • 選択した項目の値が数字に該当する場合は==(等しい), >=(より大きいか等しい), <=(より小さいか等しい) 条件を選択できます。

  3. 条件項目で条件を選択します。

  4. 条件に一致する文字列または数字を入力します。

  5. 適用ボタンを選択します。

ノート

フィルター条件の追加と削除

  • フィルタリング条件を追加するには、追加 ボタンをクリックし、手順 1~5 を繰り返します。追加された条件は AND(&&)条件として適用されます。

  • 条件追加中に一部の項目を削除する場合は、フィルター条件の右側にある 削除アイコン ボタンをクリックします。すべての条件を削除するには、削除アイコン 完全削除 ボタンをクリックします。

  • フィルター オプションに適用された条件をすばやく削除するには、 ボタンをクリックします。

フィルター条件を修正する​

  1. 画面上部の フィルター オプションで、適用されている項目をクリックします。

  2. フィルターの修正 ウィンドウで目的の項目を修正し、適用 ボタンをクリックします。