1. Call 통계
2010.07.04 23:56
- 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
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
27 | 8. 애플리케이션 커서 캐싱 | 토시리 | 2010.06.29 | 6742 |
26 | 9. Static vs. Dynamic SQL [1] | balto | 2010.07.03 | 18608 |
25 | 10. Dynamic SQL 사용 기준 | balto | 2010.07.03 | 8760 |
24 |
11. Static SQL 구현을 위한 기법들
![]() | 실천하자 | 2010.07.04 | 12273 |
23 |
4. Array Processing 활용
![]() | 휘휘 | 2010.07.04 | 21041 |
» | 1. Call 통계 | 실천하자 | 2010.07.04 | 10603 |
21 |
5. Fetch Call 최소화
![]() | 휘휘 | 2010.07.05 | 17105 |
20 | 5장. 데이터베이스 Call 최소화 원리 | 휘휘 | 2010.07.05 | 6241 |
19 |
2. User Call vs. Recursive Call
![]() | 토시리 | 2010.07.07 | 9191 |
18 |
3. 데이터베이스 Call이 성능에 미치는 영향
![]() | 토시리 | 2010.07.07 | 11804 |
17 | 6장. I/O 효율화 원리 | 휘휘 | 2010.07.07 | 6554 |
16 |
4. Prefetch
![]() | balto | 2010.07.10 | 28599 |
15 |
5. Direct Path I/O
![]() | balto | 2010.07.10 | 12352 |
14 | 8. PL/SQL 함수 호출 부하 해소 방안 | 토시리 | 2010.07.11 | 14223 |
13 | 6. 페이지 처리의 중요성 | 실천하자 | 2010.07.11 | 6971 |
12 | 2. Memory vs. Disk I/O | 휘휘 | 2010.07.11 | 7569 |
11 | 3. Single Block vs. Multiblock I/O | 휘휘 | 2010.07.11 | 9329 |
10 | 7. PL/SQL 함수의 특징과 성능 부하 | 실천하자 | 2010.07.12 | 12765 |
9 |
1. 블록 단위 I/O
![]() | 토시리 | 2010.07.12 | 9528 |
8 |
1. Library Cache Lock
![]() | balto | 2010.07.17 | 12946 |