Oracle10gのSQLチューニングについての検証 その3

<Oracle10gのSQLチューニングについての検証 その3>
~v$sql活用編~
ペンネーム: りん

今回から、v$sqlのAPLLICATION_WAIT_TIME、CONCURRENCY_WAIT_TIME
USER_IO_WAIT_TIME以外のWAIT EVENTは含まれないのかな?
というところを検証したいと思います。

例にとるのはlog file syncにしてみます。

SQL> select name,wait_class from v$event_name where name = 'log file sync';

NAME                                                   WAIT_CLASS
------------------------------------------------------ --------------------
log file sync                                          Commit

V$WAIT_CLASSビューを参照すると、log file syncはCommitクラスであること
がわかります。
log file syncはCommitが多かったりlog bufferが小さかったりする場合に発
生しやすいイベントでしたよね。

でも、「ユーザがCommit打つんだから、USER_IO_WAIT_TIMEに入るんじゃないの?!」
という考えもあるかもしれないので、白黒はっきりさせちゃいましょう。

以下のようなPL/SQLを実行するとlog file syncの待機Eventが発生するはずで
す。

SQL> begin
  2  for cnt in 1..10000 loop
  3      update test_table set value = cnt where id = cnt;
  4      commit;
  5  end loop;
  6  end;
  7  /

PL/SQLプロシージャが正常に完了しました。

では、v$sqlを確認したいと思います。

SQL> select sql_text, user_io_wait_time from v$sql where sql_text like '%update test_table%';

SQL_TEXT                                                                         USER_IO_WAIT_TIME
-------------------------------------------------------------------------------- -----------------
begin for cnt in 1..10000 loop     update test_table set value = cnt where id =                  0
cnt;     commit; end loop; end;

USER_IO_WAIT_TIMEは0でしたが、Traceファイルを確認すると
log file syncイベントが0.06秒であったことが判りました。
やはりクラスの異なるlog file syncが発生したとしても
USER_IO_WAIT_TIMEには含まれないようです。

つまり、SQLチューニングで改善することができる待機イベントの値がv$sql
ビューには格納されているようですね。

今回はとっても短いですが…ここまでです。

自分をチューニングしたい茅ヶ崎にて…