"오라클 덤프 oradebug"의 두 판 사이의 차이
DB CAFE
(→SGA내 변수 찾기 - x$ksmfsv (Kernel Services Memory Fiexed SGA Variables )) |
(→메모리 덤프) |
||
(같은 사용자의 중간 판 4개는 보이지 않습니다) | |||
2번째 줄: | 2번째 줄: | ||
* sysdba 권한 필요 | * sysdba 권한 필요 | ||
* DBWR 과 LGWR 수행을 이해 하기 위해서는 해당 프로세스를 stop 시킬필요가 있음. | * DBWR 과 LGWR 수행을 이해 하기 위해서는 해당 프로세스를 stop 시킬필요가 있음. | ||
− | * | + | * Oradebug 를 이용 하여 suspend , resume 시킴. |
1) 오라클 프로세스 Attach 시키기 위해 v$process에서 pid 확인 | 1) 오라클 프로세스 Attach 시키기 위해 v$process에서 pid 확인 | ||
124번째 줄: | 124번째 줄: | ||
=== 메모리 덤프 === | === 메모리 덤프 === | ||
* 특정한 메모리 위치에 대한 정보를 조사하기 위해 사용 | * 특정한 메모리 위치에 대한 정보를 조사하기 위해 사용 | ||
− | * 이름을 확인 한후 | + | * 이름을 확인 한후 메모리를 덤프함 |
* 만약 오라클 변수의 이름을 알고 있다면 dumpvar 명령을 사용 하여 값을 확인할수 있음. | * 만약 오라클 변수의 이름을 알고 있다면 dumpvar 명령을 사용 하여 값을 확인할수 있음. | ||
175번째 줄: | 175번째 줄: | ||
[012CAB5E0, 012CAB5E4) = 129C52F8 | [012CAB5E0, 012CAB5E4) = 129C52F8 | ||
</source> | </source> | ||
+ | |||
+ | |||
+ | * 퍼블릭 리두 쓰레드 내용 출력 | ||
+ | <source lang=sql> | ||
+ | |||
+ | select first_buf_kcrfa | ||
+ | , last_buf_kcrfa | ||
+ | , pnext_buf_kcrfa_cln | ||
+ | , next_buf_num_kcrfa_cln | ||
+ | from x$kcrfstrand | ||
+ | where last_buf_written_kcrfa != '00' | ||
+ | order by indx; | ||
+ | |||
+ | |||
+ | FIRST_BUF_KCRFA LAST_BUF_KCRFA PNEXT_BUF_KCRFA_ NEXT_BUF_NUM_KCRFA_CLN | ||
+ | ---------------- ---------------- ---------------- ---------------------- | ||
+ | 00000000C0000000 00000000C037BE00 00000000C02D7A00 5820 | ||
+ | 00000000C037C000 00000000C06F7E00 00000000C068CE00 6278 | ||
+ | </source> | ||
+ | :- first_buf_kcrfa, last_buf_kcrfa 는 퍼블릭 리두 쓰레드의 첫번째,마지막 버퍼의 주소를 의미 | ||
+ | :- pnext_buf_kcrfa_cln 은 다음번에 사용될 버퍼 주소 |
2024년 5월 20일 (월) 11:01 기준 최신판
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
1 프로세스 서브펜딩[편집]
- sysdba 권한 필요
- DBWR 과 LGWR 수행을 이해 하기 위해서는 해당 프로세스를 stop 시킬필요가 있음.
- Oradebug 를 이용 하여 suspend , resume 시킴.
1) 오라클 프로세스 Attach 시키기 위해 v$process에서 pid 확인
-- oracle process attach
select prc.pid
from v$bgprocess bgp
, v$process prc
where bgp.name = 'LGWR'
and prc.addr = bgp.paddr
;
PID
----------
20
SQL> oradebug setorapid 20
Oracle pid: 20, Unix process pid: 2977, image: oracle@b4eb0743df57 (LGWR)
2) suspend
oradebug suspend
3) 다른 세션에서 sql 을 수행하고 commit 을 수행함.
-- commit 작업은 hang에 걸리게 됨. log file sync 대기이벤트를 대기 하게 됨.
4) resume
oradebug resume
2 덤프[편집]
- 메모리 구조를 트레이스 파일로 덤프
SQL> oradebug setmypid
Statement processed.
SQL> alter session set tracefile_identifier = DBCAFE;
Session altered.
SQL> oradebug tracefile_name
/u01/app/oracle/diag/rdbms/mongo/MONGO/trace/MONGO_ora_30886_DBCAFE.trc
옵션 | 수행결과 |
---|---|
buffers N |
|
file_hdrs N |
|
redohdr N |
|
controls N |
|
library_cache N |
|
library_cache_object {level} {address} |
|
heapdump N |
|
3 메모리 덤프[편집]
- 특정한 메모리 위치에 대한 정보를 조사하기 위해 사용
- 이름을 확인 한후 메모리를 덤프함
- 만약 오라클 변수의 이름을 알고 있다면 dumpvar 명령을 사용 하여 값을 확인할수 있음.
oradebug <영역> <변수명>
- 예시 ) kcb는 버퍼캐시, nchk는 ??? 변수를값을 조회시
SQL> oradebug dumpvar sga kcbnchk
boolean kcbnchk_ [060019FD4, 060019FD8) = 00000001
- 예시 ) 현재 세션의 use_stored_outlines 값을 알고 싶다면 , ugauso_p라른 변수명 사용
SQL> alter session set use_stored_outlines = rule_based;
Session altered.
SQL> oradebug setmypid
Statement processed.
SQL> oradebug dumpvar uga ugauso_p
qolprm ugauso_p [7F197A4EFC48, 7F197A4EFCD0) = 00000001 5552000A 425F454C 44455341 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ...
4 SGA내 변수 찾기 - x$ksmfsv (Kernel Services Memory Fiexed SGA Variables )[편집]
SQL> select addr,ksmfsnam from x$ksmfsv where ksmfsnam like 'kcbn%';
ADDR KSMFSNAM
-------------------- ------------------------------
0000000012CAB5E0 kcbncbh_
0000000012CAB640 kcbnwp_
0000000012CAD200 kcbnbf_
0000000012CAD4C0 kcbnpg_
0000000012CAD600 kcbnchkl_
0000000012CAD620 kcbnchk_
0000000012CAD740 kcbnumaactive_
0000000012CAD8A0 kcbnvmenabled_
0000000012CAD920 kcbnbcscv_
- ADDR 은 16진수
- 0000000012CAB5E0 => 0x12CAB5E0 으로 해시버킷의 갯수 확인
- peek 명령어는 주소 와 길이(4는 4 bytes,최소길이)
SQL> oradebug peek 0x12CAB5E0 4
[012CAB5E0, 012CAB5E4) = 129C52F8
- 퍼블릭 리두 쓰레드 내용 출력
select first_buf_kcrfa
, last_buf_kcrfa
, pnext_buf_kcrfa_cln
, next_buf_num_kcrfa_cln
from x$kcrfstrand
where last_buf_written_kcrfa != '00'
order by indx;
FIRST_BUF_KCRFA LAST_BUF_KCRFA PNEXT_BUF_KCRFA_ NEXT_BUF_NUM_KCRFA_CLN
---------------- ---------------- ---------------- ----------------------
00000000C0000000 00000000C037BE00 00000000C02D7A00 5820
00000000C037C000 00000000C06F7E00 00000000C068CE00 6278
- - first_buf_kcrfa, last_buf_kcrfa 는 퍼블릭 리두 쓰레드의 첫번째,마지막 버퍼의 주소를 의미
- - pnext_buf_kcrfa_cln 은 다음번에 사용될 버퍼 주소