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
以降は、通常通りクエリー結果のみ表示される。
実行計画や統計情報を元にチューニングする場合、目標値を決めて
修正してはトレース、修正してはトレースの繰り返しとなる。

