「わからない」を「わかった」に変えるブログ

OracleでSQL文の処理時間を測定する方法

更新日: 公開日:2006/10/10
Oracle SQL の処理時間を測定する方法

SQL のパフォーマンスチューニングをするために、SQL の処理時間や処理負荷を調べるのはとても重要な作業です。

一般的にはデバッグ用のログをプログラムに仕掛け、プログラム処理速度の観点も含めて確認します。その上で SQL に問題ありそうと判断した場合に、より詳しい検証作業を実施します。

もし SQL の処理時間を測定するだけであれば、SQL*Plus 上で簡単に確認できます。では具体的にどうやるのか、詳しく見ていきましょう。

SQLの処理時間測定方法

全体の手順の流れ

  1. SQL*Plus を開く
  2. 実行結果 (クエリの結果) を非表示に設定する
  3. 経過時間を測定する設定を行う
  4. 測定したい SQL を実行する

2番目の SQL 実行結果を非表示にしている理由は、データ出力に掛かった時間も計測対象になるためです。純粋に SQL のレスポンス速度がどれくらいかを把握するだけなら、非表示にしておいたほうが確認しやすいです。

SQL*Plus での実行内容

SQL*Plus を起動したら、対象のデータベースにログインして次のコマンドを発行します。

  1. set autotrace traceonly
  2. set timing on
  3. SQL 実行

注目するのは SQL を発行してから処理が戻るまでのレスポンス速度。ここでは SQL の実行結果を非表示にして進めていきます。

まず AUTOTRACE の設定を行い、SQL の抽出結果を非表示にします。そして経過時間を測定できるように TIMING の設定を行います。2つの設定をしたら、あとは調査対象の SQL を実行するだけです。

SQL処理時間の測定例

上記コマンドを設定した場合の出力例を以下に示します。

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

処理結果から select の抽出結果は12行。掛かった時間は 0.08 秒だとわかりました。

また AUTOTRACE の設定に伴い 実行計画 も出力されます。この情報は SQL の処理負荷や改善点を分析するときに役立ちます。

また実行計画の分析から、処理速度を向上させるヒントを見つけることもできます。単に掛かった時間だけを見るのではなく、こちらも一緒に確認しておく習慣を持っておくと良いです。

以上、Oracle で SQL 文の処理時間を測定する方法の紹介でした。

\ この記事をシェアする /