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
ビューには格納されているようですね。
今回はとっても短いですが…ここまでです。
自分をチューニングしたい茅ヶ崎にて…