2010년 12월 10일 금요일
유닉스환경에서 trace + tkprof 실행
1. sql*plus 실행
-- sql 실행할 파일위치가 있는 곳( /usr_app/sql ) 에서 sqlplus 실행. ( 개인적으로 여기가 편함 )
-- sqlplus에서 바로 sql파일을 읽어서 실행하기 편하므로
/usr_app/sql/sqlplus xxx/xxx@xxx
2. sql 파일 생성
-- 현재 접속된 SESSION 의 spid 확인
select p.spid
from v$process a, v$session b
where a.addr = b.paddr
and b.audsid = userenv('SESSIONID');
결과 SPID : 1080
-- 2010.1.5 추가분
- CPU시간, 실행시간등 시간에 관련된 정보를 표시하기 위해 사용된다.
- 지속적인 설정을 위해 패러미터파일(init.ora)에 설정하거나
- 세션에서만 임시로 설정하기 위해
alter session set timed_statistics=true 로 사용할 수 있다.
ALTER SESSION SET TIMED_STATISTICS = TRUE;
-- TRACE 시작
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12';
-- 2011.1.5 추가
-- 트레이스 파일에 식별자 붙이기 ( 'jjang_' 로 붙는다 )
alter session set tracefile_identifier='jjang';
alter session set sql_trace=true;
set autot traceonly;
-- 실행할 sql 입력
SELECT *
FROM EMP
WHERE EMPNO = 000000
AND DEPTNO = 999;
--TRACE 끄기
ALTER SESSION SET SQL_TRACE = FALSE;
-- SQL TRACE 파일 위치의 파악
-- 기억해 두었다면 실행할 필요가 없겠죠?
SHOW PARAMETER USER_DUMP_DEST;
==> test.sql로 생성
==> 보통 다른데서 파일 만들어놓고 FTP로 업로드 해서 사용하면 됨.
3. TKPROF 실행
tkprof db명_ora_1080.trc /usr_app/sql/db명_ora_1080.txt
/usr_app/sql/ 폴더아래에 db명_ora_1080.txt 으로 텍스트 파일이 생성됨.
다시 ftp로 받아서 읽거나 vi로 읽으면 끝.
2010년 12월 8일 수요일
로컬 oracle trace + tkprof 사용하기
1. sql*plus 실행
system으로 접속
2. scott - dba권한 부여
grant dba to scott with admin option;
3. 현재 접속된 SESSION 의 spid 확인
select p.spid
from v$process a, v$session b
where a.addr = b.paddr
and b.audsid = userenv('SESSIONID');
결과 SPID : 1080
4. TRACE 시작
ALTER SESSION
SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12';
5. SQL 실행
SELECT *
FROM EMP
WHERE EMPNO = 000000
AND DEPTNO = 999;
6. TRACE 끄기
ALTER SESSION SET SQL_TRACE = FALSE;
7. SQL TRACE 파일 위치의 파악
SHOW PARAMETER USER_DUMP_DEST;
8. TKPROF 실행
로컬에 설치된 오라클 ( C:ORACLE )
- 디폴트 세팅된 TRC 파일 위치
C:\ADMIN\DATABASE명\UDUMP\ XXX.TRC
9. CMD 실행
tkprof scott/tiger trace=C:\admin\db명\udump\db명_ora_1080.trc sys=no output=db명_ora_1080.txt
db명_ora_1080.txt 으로 텍스트 파일이 생성됨.
내용확인.
Cost 구하는 공식 정의
1.
Cost 구하는 공식 정의
cost = ( Estimated time / Single Block I/O time )
= (Single Block I/O Count ) + ( Multi Block I/O Time / Single Block I/O Time ) + (CPU Time / Single Block I/O Time )
= Single Block I/O Count + Ajdusted Multi Block I/O Count + Adjusted CPU Count
2.
Oracle9i는 System Statistics를 수동으로 수집
System Statistics를 별도로 수집하지 않는 한 I/O 기반의 Cost 계산 방식을 사용한다.
따라서 정기적으로 Syste Statistics를 생성해야 한다.
Oracle10g는 Noworkload System Statistics를 기본으로 이용하기 때문에 CPU Model 이 사용되며
항상 Time 기반의 Cost 계산방식을 사용하게 된다.
따라서 DBA가 수동으로 수집해야 할 System Statistics는 10g와 다르게 Workload System Statistics라 불린다.
3.
Oracle 9i 이전까지는 I/O 기반의 Cost Model에서는 Time을 고려하지 않으며 CPU의 성능도 고려하지 않는다.
오로지 I/O의 수행횟수 ( Count )만을 고려한다.
I/O 기반의 Cost 계산
Cost = Single Block I/O Count + Multi Block I/O Count