OS 환경 : Oracle Linux 7.6 (64bit)
DB 환경 : Oracle Database 19.3.0.0
방법 : 오라클 19c 다른 세션 트레이스 설정
오라클에서 내 세션에 10046 트레이스를 걸기위해선 아래 링크처럼
내 세션에서 alter session set events '10046 trace name context forever, level 12'; 명령을 수행한 뒤 쿼리를 실행해야함, 이 명령으로는 다른세션에 트레이스를 설정할수 없음
오라클 19c 10046 trace 및 tkprof 자동수행 스크립트 ( https://positivemh.tistory.com/960 )
오라클 실행계획 확인 및 트레이스 방법 ( https://positivemh.tistory.com/364 )
다른 세션에 10046 트레이스를 걸려면 dbms_monitor 패키지를 이용해야함
본문에서는 다른 세션에 트레이스를 거는 방법을 설명하고 트레이스 결과를 확인해봄
dbms_monitor 구문
1
2
3
4
5
6
|
DBMS_MONITOR.SESSION_TRACE_ENABLE(
session_id IN BINARY_INTEGER DEFAULT NULL,
serial_num IN BINARY_INTEGER DEFAULT NULL,
waits IN BOOLEAN DEFAULT TRUE,
binds IN BOOLEAN DEFAULT FALSE,
plan_stat IN VARCHAR2 DEFAULT NULL);
|
인자 설명
session_id : 트레이스를 실행할 세션 id를 입력, NULL 입력시 본인 세션을 트레이스함
원문 : Client Identifier for which SQL trace is enabled. If omitted (or NULL), the user's own session is assumed.
serial_num : 트레이스를 실행할 serial#을 입력, NULL 입력시 세션을 식별할 때 session_id만 사용함
원문 : Serial number for this session. If omitted (or NULL), only the session ID is used to determine a session.
waits : true로 설정하는 경우 wait 정보까지 포함함
원문 : If TRUE, wait information is present in the trace
binds : true로 설정하는 경우 바인드 변수 정보까지 포함함
원문 : If TRUE, bind information is present in the trace
plan_stat : row source 통계를 수집하는 빈도를 정함, never(안함), first_execution(처음만 수집, null과 동일), all_execution(모두 수집) 중 하나를 입력해야함
원문 : Frequency at which we dump row source statistics. Value should be 'NEVER', 'FIRST_EXECUTION' (equivalent to NULL) or 'ALL_EXECUTIONS'.
10046 트레이스 레벨을 아래와 같이 설정할 수 있는데
dbms_monitor에서 wait만 설정하면 10046 트레이스 level 8 과 동일한듯하고, binds만 설정하면 10046 트레이스 level 4 과 동일한듯하고
wait, binds, plan_stat 까지 설정하면 10046 트레이스 level 12와 동일한 설정인듯함
LEVEL 0 : 트레이스 안 함. SQL_TRACE=false 로 설정한 것과 동일한 효과
LEVEL 1 : 일반적인 SQL 트레이스(SQL_TRACE=true) 정보 제공
LEVEL 4: SQL TRACE 정보 + BIND 정보 제공
LEVEL 8: SQL TRACE 정보 + WAIT EVENT 정보 제공
LEVEL 12: SQL TRACE 정보 + BIND 정보 + WAIT EVENT 정보 제공
테스트
트레이스 대상 세션 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SQL>
set lines 200 pages 1000
col username for a10
col tracefile for a100
select s.username, s.sid, s.serial#, s.sql_trace, p.tracefile
from v$session s, v$process p
where s.paddr=p.addr
and type != 'BACKGROUND'
and s.username = 'IMSI';
USERNAME SID SERIAL# SQL_TRAC TRACEFILE
---------- ---------- ---------- -------- ----------------------------------------------------------------------------------------------------
IMSI 22 29713 DISABLED /ORA19/app/oracle/diag/rdbms/oracle19/oracle19/trace/oracle19_ora_9792.trc
|
sql_trace 가 disable 상태임
프로세스 트레이스 설정(sid와 serial# 사용)
1
2
3
|
SQL> exec dbms_monitor.session_trace_enable(22, 29713, true, true);
PL/SQL procedure successfully completed.
|
트레이스 대상 세션 재확인
1
2
3
4
5
6
7
8
9
10
11
12
|
SQL>
set lines 200 pages 1000
col username for a10
col tracefile for a100
select s.username, s.sid, s.serial#, s.sql_trace, p.tracefile
from v$session s, v$process p
where s.paddr=p.addr
and type != 'BACKGROUND'
and s.username = 'IMSI';
USERNAME SID SERIAL# SQL_TRAC TRACEFILE
---------- ---------- ---------- -------- ----------------------------------------------------------------------------------------------------
IMSI 22 29713 ENABLED /ORA19/app/oracle/diag/rdbms/oracle19/oracle19/trace/oracle19_ora_9792.trc
|
sql_trace 컬럼이 enabled로 변경됨
대상 세션에서 쿼리 수행
1
2
3
4
5
|
SQL> select * from emp where empno = 7839;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7839 KING PRESIDENT 17-NOV-81 5000 10
|
프로세스 트레이스 해제(sid와 serial# 사용)
1
2
3
|
SQL> exec dbms_monitor.session_trace_disable(22, 29713);
PL/SQL procedure successfully completed.
|
트레이스 파일 tkprof 로 변환
1
2
3
4
5
6
|
$ cd /ORA19/app/oracle/diag/rdbms/oracle19/oracle19/trace/
$ tkprof oracle19_ora_9792.trc oracle19_ora_9792_tkpof.txt sys=no
TKPROF: Release 19.0.0.0.0 - Development on Thu Apr 11 13:50:53 2024
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
|
트레이스 파일 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
$ cat oracle19_ora_9792_tkpof.txt
TKPROF: Release 19.0.0.0.0 - Development on Thu Apr 11 13:50:53 2024
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Trace file: oracle19_ora_9792.trc
Sort options: default
********************************************************************************
count = number of times OCI procedure was executed
cpu = cpu time in seconds executing
elapsed = elapsed time in seconds executing
disk = number of physical reads of buffers from disk
query = number of buffers gotten for consistent read
current = number of buffers gotten in current mode (usually for update)
rows = number of rows processed by the fetch or execute call
********************************************************************************
SQL ID: 2qy6kzx420vfp Plan Hash: 2949544139
select *
from
emp where empno = 7839
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 0.00 0.00 0 2 0 1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 0.00 0.00 0 2 0 1
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 78
Number of plan statistics captured: 1
Rows (1st) Rows (avg) Rows (max) Row Source Operation
---------- ---------- ---------- ---------------------------------------------------
1 1 1 TABLE ACCESS BY INDEX ROWID EMP (cr=2 pr=0 pw=0 time=23 us starts=1 cost=1 size=38 card=1)
1 1 1 INDEX UNIQUE SCAN PK_EMP (cr=1 pr=0 pw=0 time=11 us starts=1 cost=0 size=0 card=1)(object id 27292)
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
SQL*Net message to client 1 0.00 0.00
********************************************************************************
|
정상적으로 10046 트레이스 결과가 확인됨
참고로 이 방식으로 백그라운드 프로세스의 트레이스도 걸수 있음
참조 :
오라클 19c 10046 trace 및 tkprof 자동수행 스크립트 ( https://positivemh.tistory.com/960 )
오라클 실행계획 확인 및 트레이스 방법 ( https://positivemh.tistory.com/364 )
https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_MONITOR.html#GUID-C9054D20-3A70-484F-B11B-CC591A10D609
'ORACLE > Performance Tuning ' 카테고리의 다른 글
오라클 19c 일반 insert, insert all, union all insert 성능 테스트(컬럼 1개) (0) | 2024.05.19 |
---|---|
오라클 19c Parallel DML 시 Direct Path Write 이벤트 관련 (0) | 2024.04.19 |
오라클 19c latch: cache buffers chains 이벤트 발생시 핫블록 찾기 (0) | 2024.03.28 |
오라클 19c FULL TABLE SCAN (FTS)시 direct path read 이벤트 관련 (0) | 2024.03.21 |
오라클 19c group by 컬럼 나열 및 집계함수 적용 성능 비교 (0) | 2024.03.19 |