SQL*Plus上で、SQLの処理にかかった時間を測定する方法があります。手順としては以下の通り。


  1. 実行結果(クエリの結果)を表示させない。(※ 表示時間もカウントされてしまうため。)
  2. 経過時間を測定する設定を行う。
  3. SQL文を実行。

1. に関して索引の絡みなどを考えると、実行計画もあると便利なので、
AUTOTRACEを使用し、結果セットのみを表示しないようにします。経過時間を表示するにはTIMINGを使用します。


  1. set autotrace traceonly
  2. set timing on
  3. select c_hoge from T_HOGE where ・・・

↓こんな感じになります。

SQL> set autotrace traceonly
SQL> set timing on
SQL> select c_hoge from T_HOGE;

12行が選択されました。


経過: 00:00:00.08

実行計画
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=3 Card=12 Bytes=972)
   1    0   TABLE ACCESS (FULL) OF 'T_HOGE' (TABLE) (Cost=3 Card=12 Bytes=972)


統計
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          8  consistent gets
          6  physical reads
          0  redo size
       2773  bytes sent via SQL*Net to client
        504  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
         12  rows processed

索引を設定する前後で調べると、かなり有効な結果が得られるのではないでしょうか。(まぁ、索引設定前後の速度は、時刻を計るまでもない変貌振りですが・・・。)

コメント入力フォーム

About

Name : NJ
age : 28くらい
技術メモなどなど。個人的な備忘録ではありますが、情報として役に立てたら何よりです。難しい事はよくわかりません。
お便りはこちらまで。