TKPROF Utility ?
DB에서 행해지는 또는 user가 생성하는 sql문에 대해 "sqltrace" option을 통해
trace file을 생성하여 분석하는 방법이다.
이때 trace file은 우리가 알아보기 힘든 file 형태이기 떄문에 변환해주는 단계가 필요한데 이때 "Tkprof"를 사용한다.
이때 TKPROF 트레이스 파일에서 알수 있는 내용은 아래와 같다.
- SQL 문이 실행될 때 PARSE, EXCUTION, FETCH 작업을 실행한 횟수
- PARSE, EXCUTION, FETCH시 CPU 사용시간
- 데이타베이스 내에서 SQL문이 실행되는데 소요된 시간
- SQL문이 실행되면서 발생한 DISK-I/O 블록 수
- 조건을 만족하는 전체 행 수
- SQL문이 실행되면서 사용한 SGA영역의 크기
- SQL문의 실행계획
- 해당 sessin에서 작업시 사용했던 전체 Cpu, Memoru, Block공간의 크기
TKPROF [트레이스 파일명] [분석결과 파일명] [옵션]
operation 설명 -------------------- ------------------------------------------------------------------ EXPLAIN = [user/passwd] tkprof실행시에 해당 user로 접속하여 explain을 실행. 해당 경로를 알기 위해 써주어야 한다. (해당 사용자에는 plan_table)이 생성되어 있어야 함) TABLE = [schema.tablename] 실행계획을 저장할 tkprof 임시 테이블이름 PRINT = [integer] 트레이스 파일 내에 분석된 sql문의 수를 n만큼 제한하여 출력 RECORD = [filename] 트레이스 파일내에 분석된 sql문을 지정한 파일에 저장해 줌 SORT = [option] 트레이스 파일 내에 분석된 sql문장을 지정한 옵션에 의해 수행시간이 오래 걸린 순서로 Descending Sort하여 출력 SYS = [yes/no] 트레이스 파일 내에 생성된 SQL문장 중에 오라클 서버가 내부적으로 작업을 위해 실행한 SQL문을 출력시 포함할 것인가를 결정 AGGREGATE = [no] 다른 USER에 의해 실행된 동일한 SQL을 하나로 집계하지 않는 OPTION 행/컬럼 설명 ----------- --------------------------------------------------------------------------------------------------------- parse SQL문이 파싱되는 단계에 대한 통계 새로 파싱되거나 공유SQL 풀에서 찾아온 것도 포함 execute SQL 문의 실행 단계에 대한 통계 (INSERT, UPDATE, DELETE 와같은 DML구문일 경우) fetch SQL 문이 실행되면서 페치된 통계 (SELECT) count SQL 문이 parse/execute/fetch가 수행된 횟수 cpu parse, execute, fetch가 실제로 사용한 CPU시간(1/100초 단위) elapsed 작업의 시작에서 종료까지 실제 소요된 시간(초) disk 디스크에서 읽혀진 데이터 불록 수(Physical Read) query 메모리 내에서 변경되지 않은 불록을 읽거나 다른 세션에 의해 변경되었으나 아직 커밋되지 않아 복사해둔 스냅 샷 블록을 읽은 불록 수 SELECT문에서는 거의 여기에 해당하며, update, insert, delete 작업시에는 소량만 발생(Logical Read) current 현 세션에서 작업한 내용을 커밋하지 않아 오로지 자신에게만 유효한 블록(dirty block)을 엑세스한 불록 수. 주로 update, insert, delete 작업시 많이 발생 rows SQL 문을 수행한 결과에 의해 최종적으로 엑세스된 행의 수(서브쿼리에서 추출된 행은 제외)
Misses in library cache during parse Parse구간에서 해당 SQL을 Library Cache에서 읽지 못하고 잃어버린 횟수, 값은 1씩 증가함, 값이 1이면 Hard Parse, 0이면 Soft Parse를 의미함.
cr(consistent read) Logical Block Read
pr(physical read) Physical Block Read
pw(physical write) Physical Block Write
time 수행시간(1/1,000,000초)
예)
trace 환경정보 조회
-----------------------------------------------------
SELECT * FROM V$PARAMETER WHERE NAME = 'timed_statistics';
SELECT * FROM V$PARAMETER WHERE NAME = 'sql_trace';
SELECT * FROM V$PARAMETER WHERE NAME = 'user_dump_dest'; <- trace파일 위치
SELECT * FROM V$PARAMETER WHERE NAME = 'max_dump_file_size';
SQL> ALTER SESSION SET SQL_TRACE = TRUE;
SQL> SELECT * FROM ....
SQL> ALTER SESSION SET SQL_TRACE = FALSE;
트레이스파일 위치 : $ORACLE_BASE/admin/SID/udump
$ORACLE_HOME/bin/tkprof kmuoradb_ora_1994.trc c.out sys=no aggregate=no explain=web_user/web_pass$ print=1
c:\> tkprof orcl_ora_3792.trc orcl_ora_3792.out explain=ess/ess sys=no aggregate=no sort=execpu;
sqlplus 에서 autotrace하기
--------------------------------------------------------------
SQL> set autotrace on
SQL> select * from ....
....
SQL> SQL> set autotrace off
-- DAP 교재 내용