■SQL TRACEの使い方
----------------------------------------
●SID、SERIAL#、PADDR取得:
select sid, serial#, username, paddr, osuser, machine, program
from v$session
where username = '&username'
/
●SPID取得:
select spid from v$process
where addr = (select paddr from v$session where sid = &SID and serial# = &SERIAL)
/
●1回で取得
SELECT SPID
FROM V$PROCESS
WHERE ADDR IN (SElECT PADDR
FROM V$SESSION
WHERE USERNAME = '&username')
/
★1回で取得
SELECT P.SPID FROM V$PROCESS P, V$SESSION S
WHERE S.AUDSID = USERENV('SESSIONID') AND S.PADDR = P.ADDR
/
SPID
------------
12682
●トレースファイル確定:
SID_ora_SPID.trc --> instance_ORA_12682.trc
●TIMED_STATISTICSパラメータ確認
SHOW PARAMETER TIMED_STATISTICS;
ALTER SESSION SET TIMED_STATISTICS=TRUE;
●トレースファイル名確定:
Alter session set tracefile_identifier = 'SAI';
●トレース開始
ALTER SESSION SET SQL_TRACE = TRUE;
●SQLの実行
(略)
●トレース中止
ALTER SESSION SET SQL_TRACE = FALSE;
●分析
$ORACLE_BASE$/ADMIN/udump/配下からトレースファイルを取得
TKPROF SID_ora_SPID.trc SID_ora_SPID.prf aggregate=no sys=no explain=scott/tiger
ソードと追加して上位のものをとる
TKPROF SID_ora_SPID.trc SID_ora_SPID.prf aggregate=no sys=no sort=(fchela,exeela,prsela) explain=scott/tiger print=20
●TKPROF分析ポイント:
1.cpu << elapsed → I/Oのボトルネック
2.1 - (disk / ( query + current )) … メモリキャッシュのヒット率
3.( query + current ) / rows → 処理した行数に対する、アクセスブロック数
(1行を取得するために何ブロックを読んでいるか?)
( query + current ) / rows >> 20 → 索引の使用を検討 (20はあくまでも目安)
0 件のコメント:
コメントを投稿