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

2006/10/10

SQL のパフォーマンスチューニングをするために、SQL の処理時間や処理負荷を調べるのは非常に重要な作業となります。大抵はプログラム上にデバッグログを仕掛け、プログラム処理速度の観点も含めて検証しますが、根本的に SQL が悪いと判断に至った場合に限り、SQL だけを抜き出して確認を行います。

今回は SQL*Plus 上で SQL の処理に掛かった時間を測定する方法について説明します。

SQLの処理時間測定方法

流れは以下の通りです。

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

注目するのは SQL を発行してから処理が戻ってくるまでのレスポンス速度であるため、処理結果の表示については無視します。そこで select の結果を出力しないように AUTOTRACE を使用します。そして、経過時間を表示するために TIMING を使用します。

それでは実際に SQL*Plus を立ち上げて、対象のデータベースにログインしてから、これららのコマンドを発行しましょう。

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

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

AUTOTRACE を利用すると実行計画が出力されてしまいますが、SQL そのものの速度は、実行計画の処理前に出力されている経過時間となります。処理負荷を調べるには、実行計画を分析するのも1つの手段となりますので、セットで覚えておくと良いでしょう。

なお、この実行計画を確認することで処理速度アップの方法を見つけ出すこともできます。インデックスが有効になっていないことが分かり、インデックス作成により解消するケースが大半かもしれませんが、それだけ実行計画にはヒントが隠されているので、併せて確認されることをおすすめします。

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

Name :
気力・体力勝負なシステム業界のエンジニアを経て、個人事業主として独立。Web サイト運営、動画制作など活動の場を広げています。目指すところへの道のりは険しいですが、自分が自分らしくあるために、一歩ずつ進んでいきます!

このブログでは、困ってたどり着いた人に、分かりやすく答えを提供できるように心掛けています。更新情報は、Twitter や Facebook ページを参照ください。よろしければフォローお待ちしています。

Facebook ページ NJ-CLUCKER
このブログが役に立ったら
「いいね!」お願いします
PAGE TOP ↑