메뉴 건너뛰기

bysql.net

1. Call 통계

2010.07.05 08:56

실천하자 조회 수:10441

  • Parse Call을 제외 한 SQL 수행 중 발생되는 Execute Call, Fetch Call 줄이는 방법
  • 데이터베이스 Call을 User Call 과 Recursive Call 로 나누어 각각 최소화 하는 원리와 방안
  • 불필요하고 반복적인 Call 수행 횟수를 최소화하는 것이 핵심적인 튜닝요소


    ▼ SQL Trace Report에서 Call 통계(Statistic)부분만 발췌 내용

       (이 레포트는 커서의 활동상태를 Parse, Execute, Fetch 세 단계로 나누어 각각에 대한 수행통계를 보여줌)

select cust_nm, birthday from customer where cust_id = :cust_id


call     count       cpu    elapsed       disk      query    current        rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 5000 0.18 0.14 0 0 0 0
Fetch 5000 0.21 0.25 0 20000 0 50000
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 10001 0.39 0.40 0 20000 0 50000

Misses in library cache during parse: 1
  • Parse Call : 커서를 파싱하는 과정에 대한 통계, 실행계획 생성 및 찾는 과정에 관한 정보 포함
  • Execute Call : 커서를 실행하는 단계에 대한 통계
  • Fetch Call : Select문에서 실제 레코드를 읽어 사용자가 요구한 결과집합을 반환하는 과정에 대한 통계

   ■ Parse Call 최소화 및 최적화 원리

1. 바인드 변수 사용

2. 세션 커서 캐싱

3. 애플리케이션 커서 캐싱 (Parse Call 미발생)


        ※ 바인드 변수사용 < 세션 커서 캐싱 < 애플리케이션 커서 캐싱  순으로 최소화 및 최적화


   ■ DML문(insert, update, delete, merge 등) 처리 시

→ Execute Call 시점에 모든 처리과정을 서버 내에서 완료 후 처리결과만 리턴

→ Fetch Call 미발생


   ■ Insert ‥ select 문

- 클라이언트로 부터 명시적인 Fetch Call을 받지 않고 서버 내에서 묵시적으로 Fetch


insert into MEMBER_BACKUP
select * from MEMBER

call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.07 0.15 0 3 0 0
Execute 1 6.27 43.08 13001 18410 481251 449604
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 2 6.34 41.23 13001 18413 481251 449604

Misses in library cache during parse: 1



   ■ Select 문

-  Execute Call 단계에서는 커서만 오픈, 실제 데이터 처리는 Fetch 단계

             ☞ 첫 번째 Fetch Call : 실제 데이터를 액세스하면서 일을 시작하는 시점


select REGION, count(*)
from CUST
group by REGION

call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.06 0.16 0 3 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 3 2.26 41.20 14427 14443 0 26
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 5 2.32 41.37 14427 14446 0 26

Misses in library cache during parse: 1



   ■ for update 구문

- Excute Call 단계에서 모든 레코드를 읽어 Lock 설정


select *
from SUPPLIER for update

call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.20 0.24 0 74 10178 0
Fetch 11 0.00 0.00 0 14 0 101
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 13 0.20 0.24 0 88 10178 101

Misses in library cache during parse: 0


번호 제목 글쓴이 날짜 조회 수
67 Front Page file 운영자 2010.05.17 154865
66 4. Prefetch file balto 2010.07.10 28434
65 5. 오라클 Lock file 휘휘 2010.06.07 26365
64 2. DB 버퍼 캐시 file 휘휘 2010.05.24 21916
63 3. SQL 트레이스 file balto 2010.06.06 21175
62 1. 기본 아키텍처 [1] file 휘휘 2010.05.23 19899
61 2. 트랜잭션 수준 읽기 일관성 file 휘휘 2010.06.07 19567
60 5. Undo file 토시리 2010.05.31 18650
59 11. Shared Pool file 실천하자 2010.05.31 18511
58 9. Static vs. Dynamic SQL [1] balto 2010.07.04 18343
57 4. Array Processing 활용 file 휘휘 2010.07.05 18238
56 1 장. 오라클 아키텍처 운영자 2010.05.20 17842
55 5. Fetch Call 최소화 file 휘휘 2010.07.05 16839
54 9. ASH(Active Session History) 실천하자 2010.06.14 15606
53 2. SQL 처리과정 file 휘휘 2010.06.28 15340
52 3. 버퍼 Lock [1] 휘휘 2010.05.24 15225
51 1. Explain Plan 실천하자 2010.06.06 14663
50 6. 바인드 변수의 부작용과 해법 file 실천하자 2010.06.28 14662
49 8. PL/SQL 함수 호출 부하 해소 방안 토시리 2010.07.11 14023
48 7. Result 캐시 휘휘 2010.07.19 12969