SQL*Plusでトレースを取る手順

SQL*Plus のシステム変数 autotrace で、実行計画や統計情報などの
トレース情報を取得できる。

alter system コマンドや alter session コマンドで初期化パラメータ sql_trace を
変更する方法もあるが、自分のウィンドウだけでサクッとトレースを取りたい場合は
SET コマンドでやった方がお手軽。



SET構文

SET AUTOT[RACE] { ON | OFF | TRACE[ONLY] }

※ [] 内は、省略可能。
※ set auto では、 autocommit の短縮コマンドとなるので注意。

コマンドパラメータ

・set autotrace on → SQL結果に加え、実行計画と統計情報も表示。
・set autotrace traceonly → 実行計画と統計情報のみ表示。
・set autotrace off → SQL 結果のみ表示。(デフォルト状態)

トレース取得

※ イメージです(対象テーブルに意図なし。)

autotrace on

SQL> set autotrace on

SQL> select parameter, value from nls_database_parameters where parameter
 in ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET','NLS_LANGUAGE','NLS_TERRITORY');

PARAMETER              VALUE
---------------------- ---------
NLS_LANGUAGE           JAPANESE
NLS_TERRITORY          JAPAN
NLS_CHARACTERSET       JA16EUC
NLS_NCHAR_CHARACTERSET AL16UTF16

実行計画
--------------------------------
Plan hash value: 1379162032

----------------------------------------------------------------------------
| Id  | Operation         | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |        |     1 |    26 |     2   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| PROPS$ |     1 |    26 |     2   (0)| 00:00:01 |
----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("NAME" LIKE 'NLS%' AND ("NAME"='NLS_CHARACTERSET' OR
              "NAME"='NLS_LANGUAGE' OR "NAME"='NLS_NCHAR_CHARACTERSET' OR
              "NAME"='NLS_TERRITORY'))

統計
---------------------------------------------------
          0  recursive calls
          0  db block gets
          4  consistent gets
          0  physical reads
          0  redo size
        756  bytes sent via SQL*Net to client
        524  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          4  rows processed

autotrace traceonly :実行計画と統計情報を表示

SQL> set autotrace traceonly

SQL> select parameter, value from nls_database_parameters where parameter
in ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET','NLS_LANGUAGE','NLS_TERRITORY');

~~ 重複するので記載しないが、上記と同様の実行計画と統計情報のみが表示される~~

このままではセッションを切るまで、 SQL を実行するたびに実行計画や統計情報が
表示されてしまうので、継続して SQL*Plus を使用するのなら手動で OFF にする。

autotrace off :クエリー結果を表示

SQL> set autotrace off

以降は、通常通りクエリー結果のみ表示される。

実行計画や統計情報を元にチューニングする場合、目標値を決めて
修正してはトレース、修正してはトレースの繰り返しとなる。