性能の V$ ビューの使い方

いま何が起きているかを見る(Oracle)

書き方

SELECT sid, event, wait_class, state, seconds_in_wait, sql_id, blocking_session FROM v$session WHERE wait_class <> 'Idle';
SELECT event, total_waits, time_waited_micro, wait_class FROM v$system_event ORDER BY time_waited_micro DESC;
SELECT sql_id, executions, elapsed_time, buffer_gets, sql_text FROM v$sql ORDER BY elapsed_time DESC FETCH FIRST 5 ROWS ONLY;
SELECT sid, type, lmode, request, block FROM v$lock WHERE block = 1 OR request > 0;
DBA_BLOCKERS  DBA_WAITERS  V$SESSION_WAIT  V$SQLAREA

V$SESSION の EVENT は、そのセッションがいま待っているもの(STATE が WAITING のとき)。WAIT_CLASS が Idle の待ち(SQL*Net message from client など)は「仕事がなくて待っている」だけなので除いて考えます。V$SYSTEM_EVENT は起動してからの待ちの累計、V$SQL は共有プールにある SQL ごとの実行回数・経過時間(ELAPSED_TIME、マイクロ秒)・論理読み込み(BUFFER_GETS)。BLOCKING_SESSION は行ロックで待たせている相手の SID です。

例

SELECT sid, event, seconds_in_wait FROM v$session WHERE state = 'WAITING' AND wait_class <> 'Idle';
SELECT sql_id, elapsed_time / executions FROM v$sql ORDER BY 2 DESC;

実際に打って練習する

Oracle DBA コースの Lv42「何を待っているか 待機イベント」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。

すべてのレベルが、プラチナ以上のプランで遊べます。

Oracle Database の管理コマンド一覧(DBA)へ戻る