土曜日, 9月 09, 2006

チューニング関連(SQL TRACEの使い方)

■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 件のコメント: