오라클 성능 트러블슈팅의 기초 (2012년)
Runstats 0 0 18,877

by 구루비스터디 Runstats [2023.09.07]


Runstats

예제)

  • 1. RS_START 프로시저를 호출해서 하나의 스냅샷을 만든다.

SQL>exec runStats_pkg.rs_start;


  • 2. 반복적으로 소프트 파스만을 수행하는 작업을 수행


--soft parse only

declare

v_cnt number;

begin

for idx in 1 .. 10000 loop

execute immediate

'select min(1) from dual where 1 = :b1'

into v_cnt

using idx;

end loop;

end;

/



  • 3. RS_MIDDLE 프로시저를 호출해서 두번째 스냅샷을 만든다.


SQL>exec runstats_pkg.rs_middle;



  • 4. 반복적으로 하드파스만을 수행하는 작업을 수행



declare

v_cnt number;

begin

for idx in 1 .. 10000 loop

execute immediate

'select min(1) from dual where 1 = ' || idx into v_cnt;

end loop;

end;

/



  • 5. RS_STOP 프로시저를 호출해서 세번째 스냅샷을 만든다.


--총 세개의 스냅샷이 만들어진다. 스냅샷간의 차이(Delta)는 두개가 존재하게된다.

--Runstats 패키지는 이 두개의 차이를 잘 정리해서 보여주는 것을 목적으로 한다.

-- STAT 지수와 LATCH 지수의 차이를 통해 두 작업간의 성능 차이를 명확하게 이해 할 수 있다.

SQL> set serveroutput on
SQL> exec runstats_pkg.rs_stop(100);
Run1 ran in 1713 hsecs
Run2 ran in 3416 hsecs
run 1 ran in 50.15% of the time

Name                                  Run1        Run2        Diff
LATCH.messages                         128         248         120
LATCH.checkpoint queue latch           324         642         318
LATCH.SQL memory manager worka         404         739         335
STAT...parse time cpu                    0         492         492
STAT...recursive cpu usage              72         602         530
STAT...CPU used when call star          80         614         534
STAT...CPU used by this sessio          79         615         536
STAT...bytes received via SQL*         673       1,238         565
LATCH.shared pool sim alloc              0         711         711
STAT...bytes sent via SQL*Net          725       1,453         728
STAT...Elapsed Time                  1,788       3,518       1,730
STAT...parse time elapsed                3       2,193       2,190
STAT...DB time                         166       2,413       2,247
LATCH.simulator hash latch          13,625       8,950      -4,675
STAT...enqueue requests                 11      10,004       9,993
STAT...enqueue releases                 10      10,004       9,994
STAT...parse count (hard)                4      10,003       9,999
STAT...parse count (total)               5      10,006      10,001
STAT...recursive calls              10,015      20,020      10,005
LATCH.kks stats                          8      20,012      20,004
LATCH.enqueue hash chains              280      20,477      20,197
LATCH.enqueues                         276      20,498      20,222
LATCH.row cache objects                126      30,231      30,105
LATCH.shared pool simulator             55      35,644      35,589
LATCH.library cache pin                117      60,147      60,030
LATCH.library cache lock               120      60,160      60,040
STAT...session uga memory                0      65,408      65,408
STAT...session uga memory max            0      65,408      65,408
STAT...session pga memory          131,072      65,536     -65,536
STAT...session pga memory max      131,072      65,536     -65,536
LATCH.cache buffers chains         433,615     294,577    -139,038
LATCH.library cache                    300     217,551     217,251
LATCH.shared pool                      218     341,028     340,810

Run1 latches total versus runs -- difference and pct
Run1        Run2        Diff       Pct
450,058   1,112,470     662,412     40.46%

PL/SQL procedure successfully completed.


  • 10.2.0.4에서는 Livrary Cache Latch의 획득 수 차이가 217,251번
  • 11.2.0.1에서는 LATCH 지수에서 Library Cache Latch 의 차이가 보이지 않음
  • Oracle 11g에서 Library Cache Latch가 없어지고 Mutex가 사용하기 때문(자세한내용은 3장대기이벤트 분석 )
  • Runstats 패키지와 같은 세션 스냅샷 리포트를 이용하면 이러한 차이를 손쉽게 확인 할 수 있다.
"데이터베이스 스터디모임" 에서 2012년에 "오라클 성능 트러블슈팅의 기초 " 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/4317

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입