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