2010년 12월 10일 금요일

유닉스환경에서 trace + tkprof 실행

-- 2010.1.5 수정

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