SQL Trace는 트레이스 대상 세션을 지정할 수 있으며 Auto Trace보다 더 많은 정 보를 실행계획과 함께 파일형태로 SQL_TRACE_DEST에 지정된 경로에 저장한다.
사용자는 해당 파일을 tbprof 툴을 이용하여 보기 좋은 형태로 포맷하여 확인할 수 있다. 데이터베이스 전체 세션을 대상으로 SQL TRACE 정보를 기록할 수도 있지 만 성능에 많은 영향을 미치므로 다음 예제와 같이 세션 단위로 사용해야만 한다.
alter session set sql_trace=’Y’;
EXEC SYS.DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(SID, SERIAL, TRUE);
tbprof tracefile outputfile [print= ] [sort= ] [aggregate= ]
@tibero:/log/tibero/tibero/sqltrace # tbsql tiberotest/tibero SQL> alter session set sql_trace='Y'; SQL> select sum(1) from code; ------------ SUM(1) ----------- 4 SQL> SELECT NAME, VALUE FROM V$PARAMETERS WHERE NAME='SQL_TRACE_DEST' ------------- ------------ NAME VALUE ------------- ------------ SQL_TRACE_DEST /log/tibero/tibero/sqltrace/ SQL> quit Disconnected. @tibero:/log/tibero/tibero/sqltrace # ls tb_sqltrc_24969374_56_1846968.trc @tibero:/log/tibero/tibero/sqltrace # tbprof tb_sqltrc_24969374_56_ 1846968.trc tb_sqltrc_24969374_56_1846968.out sys=no @tibero:/log/tibero/tibero/sqltrace # ls tb_sqltrc_24969374_56_1846968.trc tb_sqltrc_24969374_56_1846968.out
@tibero:/log/tibero/tibero/sqltrace # vi tb_sqltrc_24969374_56_1846968.out UserID: 23 select sum(1) from code stage count cpu elapsed current query disk rows ------ ----- ---- ------- ------- ----- ---- ---- parse 1 0.00 0.00 0 0 0 0 exec 1 0.00 0.00 0 0 0 0 fetch 1 0.00 0.00 9 17 0 1 ------ ----- ---- ------- ------- ----- ---- ---- sum 3 0.00 0.00 9 17 0 1 ========================================================================= rows execution plan ----- -------------------------------------------------------------------- 1 column projection (et=15, cr=0, cu=0, co=132, cpu=0, ro=1) 1 sort aggr (et=107, cr=0, cu=0, co=132, cpu=0, ro=1) 4 table access (full) CODE(2543) (et=429, cr=17, cu=9, co=132, cpu=0, ro=19239) ----- -------------------------------------------------------------------- *et(elapsed time),cr(consistent read block),cu(current block),co(cost), ro(rows)
-- tbsql sys/***** 접속 후 필요 권한을 tiberotest에 설정 GRANT EXECUTE ON DBMS_SYSTEM TO TIBEROTEST; GRANT SELECT ON SYS.V$SESSION TO TIBEROTEST; -- tbadmin, tbsql 을 통해 tiberotest 계정으로 로그인한 후 -- tbsql에서 세션 확인 select sid,serial#,sql_trace,prog_name,username from v$session where user name='TIBEROTEST'; SID SERIAL# SQL_TRACE PROG_NAME USERNAME ---- -------- --------- --------- ------------- 52 5021700 DISABLED tbAdmin TIBEROTEST <--트레이스를 설정할 세션 54 5022664 DISABLED tbsql TIBEROTEST <--나의 세션 --tbsql에서 tbAdmin으로 접속한 세션으로 sql trace 설정 EXEC SYS.DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(52, 5021700, TRUE) --trace 설정 확인 select sid, serial#, sql_trace, prog_name, username from v$session where username = 'TIBEROTEST'; SID SERIAL# SQL_TRACE PROG_NAME USERNAME --- ------- --------- --------- ------------ 52 5021700 ENABLED tbAdmin TIBEROTEST <--트레이스를 설정할 세션 54 5022664 DISABLED tbsql TIBEROTEST <--나의 세션 -- 이후 tbAdmin 에서 SQL 수행후 tracefile을 추출하는 과정은 -- 1) 자기세션 trace 추출과 동일함
- 강좌 URL : http://www.gurubee.net/lecture/4153
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.