메뉴 건너뛰기

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