SQLキャッチ

SQLCatch_img.png
SQLキャッチとは、データベース内でどのような SQL 文が実行されているのかを監視する機能です。
SQLキャッチを使用することで、実際に発行されている SQL 文の頻度や実行コストが確認できますので、インデックスの追加や ボトルネックとなっている SQL 文の構文見直しの作業を支援することが可能になります。

※Amazon RDS では SYSDBA権限 を付与できないためトレースは使用できません。

■ 実行手順

sqlcatch_img2.png

①[開始]ボタンを押し、データベーストレース/セッショントレースの開始を行います。
トレース開始後、ORACLE は SQL が実行される度にその内容をトレースファイルに書き出すようになります。
③[表示]ボタンを押すと、SI Object Browser は ORACLE が発行したトレースファイルの内容を確認し、整形結果を画面下段に表示します。
(初回実行時はトレースログのフォルダ選択が必要になります→後述)
④必要な結果が取得出来次第、[停止]ボタンを押してトレースを終了させます。

手順③の部分はトレースファイルが有効な間は何度でも実行できます。また、トレースログ自体はトレース終了後にも残りますので、トレースを終了させた後でも情報の表示は可能です。

■ トレースフォルダの選択
初回実行時や、トレースログフォルダが見つからない場合、SI Object Browser はトレースログの格納先を指定するダイアログを表示します。
実行環境により設定する手順が異なりますので注意して下さい。

①ORACLE サーバーと SI Object Browser が同一マシン上で動作している場合

  1. Oracle 12c 以降をご利用の場合
    SQL実行画面を開き、下記のSQLを実行してください。1件の結果が表示されます。

SELECT p.tracefile FROM v$session s JOIN v$process p ON s.paddr = p.addr WHERE s.sid = SYS_CONTEXT('userenv','sid')

結果として出力されたファイルパス (例 C:\APP\ORACLE\diag\rdbms\orcl\orcl\trace\orcl_ora_xxxx.trc) がトレースログファイルのパスですので、
このファイルが含まれるフォルダをトレースログフォルダに指定します。
(コンテナDBとそれに対応するプラガブルDBのトレースログファイルは、同一のフォルダに出力されます)

  1. Oracle 11g 以前をご利用の場合
    データベース情報画面の[初期化パラメータ]タブにある USER_DUMP_DEST の値がトレースログフォルダとなりますので、その場所を指定します。

②ORACLE サーバーと SI Object Browserが別マシン上で動作している場合
まずはケース①と同様の方法でトレースログフォルダを確認します。
次にこのフォルダを、SI Object Browser が動作しているマシン(以下クライアント)にネットワーク共有可能かどうかを検討します。
可能であれば、サーバー側で該当フォルダをネットワーク共有状態にし、クライアント側からみたサーバー上の共有フォルダ位置をトレースログフォルダとして指定します。

共有が難しいようでしたら、データのリアルタイム性は損なわれますが、トレースログフォルダにはクライアント上の適当なフォルダを指定し、
必要に応じてサーバーのログをそのフォルダにコピーすることでSQLキャッチを実行することができます。

※ORACLEサーバーの OS が Windows では無い場合
手順自体はケース②と同様ですが、さらに文字コード変換の手順が必要になります。
サーバー側に生成されるトレースログが SJIS 以外の文字コードでしたら、SI Object Browser がログを読み込む際に SJIS コードに変換して下さい。
(SQL文に2バイトコードを使用しない場合は特に問題ありません)

■ 画面の説明

項目名 説明
開始 トレース実行画面を開き、データベーストレースまたはセッショントレースを開始します。
※この機能を使用するには、SYSDBA権限が必要になります。
停止 トレース実行画面を開き、トレースを終了します。
表示 トレース結果を元に、画面下段に情報を整形出力します。
選択 トレースフォルダを変更します。
終了 ウインドウを閉じます。
出力 ボタン押下時に下記のメニューがプルダウン表示されます。
(結果表示が完了している場合のみ有効です)

Excel出力...
テーブルアクセス表の結果を、Microsoft Excel ファイルに出力します。

クリップボード出力...
表示されている表を、クリップボードにコピーします。
データベース トレース対象となるデータベースを選択します。
表示対象 画面下段に表示するトレース結果の範囲を指定します。
[全セッション]を選択した場合は、全トレースログが処理対象となります(主にパフォーマンスチェック用途)。
[指定セッション]を選択した場合は、画面中段にあるセッションリストで、チェックを入れたセッションのトレース結果のみを処理対象とします(主にターゲットセッションのデバッグ用途)。
対象トレースファイル更新日時 ここで指定した日付以降のタイムスタンプを持つトレースログが結果リストの表示対象となります。
デフォルト値として現在日付の 0 時がセットされますので、前日のログを対象としたい場合等は値を変更します。
※トレースログ自体は、ユーザーが意図的に削除しない限りサーバー上に蓄積されていきます。
過去日を指定する場合は、事前に対象とりうるトレースログの容量を確認してください。
同一SQLの結果をまとめる
チェックを入れた場合、トレースログ中の SQL 文が同じ場合は結果が1行にまとめられます。この場合、各コスト情報は1実行フェーズあたりの平均値となります。
チェックを外した場合、1 SQL 実行につき1行の結果が表示されます。
セッションリスト
現在アクティブなセッションが一覧表示されます。
表示対象を[指定セッション]にした場合の、対象セッションの選択に使用します。
また、[表示]ボタンを押して結果が出力された際にトレースログが見つかったセッションには赤いマークがつきます。
結果リスト
トレースログを元に、発行された SQL 文とそのコストを一覧表示します。
各欄の値の意味は以下の通りです。
([同一SQLの結果をまとめる]をチェックした場合、各値は1実行フェーズあたりの平均値となります)

SID...
SQLを実行したセッションIDを表示します。
[同一SQLの結果をまとめる]にチェックが入っている場合、複数セッションで実行されたSQLには「*」が表示されます。

COUNT...
SQLを実行した回数を表示します。

CPU...
SQLの解析・実行・フェッチに費やした CPU 時間を表示します。
単位は秒でミリ秒までの値が表示されます。

ELAPSED...
SQLの解析・実行・フェッチに費やした経過時間を表示します。
単位は秒でミリ秒までの値が表示されます。

DISK...
SQLの解析・実行・フェッチにより物理読込みが発生した際の、読込みブロック数を表示します。

QUERY...
SQLの解析・実行・フェッチにより一貫モードで読み出されたバッファ数を表示します。

CURRENT...
SQLの解析・実行・フェッチにより現行モードで読み出されたバッファ数を表示します。

ROWS...
SQLによって処理されたデータ行数を表示します。

SQL...
SQL文を表示します。

実行結果を選択し、ポップアップメニューを表示させることで、その SQL 文に対する詳細情報が確認できます。

実行計画...
選択した SQL 文の実行計画を表示します。

SQL文をコピー...
選択した SQL 文をクリップボードにコピーします。