[1] Call 통계
- 커서의 활동상태를 Parse, Execute, Fetch 세 단계로 나누어 각각에 대한 수행통계를 보여준다.
Call 종류
1. Parse Call
- 커서를 파싱하는 과정에 대한 통계이다.
- 실행계획을 생성하거나 찾는 과정에 관한 정보를 포함한다.
2. Execute Call
3. Fetch Call
- select문에서 실제 레코드를 읽어 사용자가 요구한 결과집합을 반환하는 과정에 대한 통계이다.
- ⭐️ insert, update, delete, merge 등 DML문은 Execute Call 시점에 모든 처리과정을 서버내에서 완료하고 처리결과만 리턴하므로 Fetch Call이 전혀 발생하지 않는다.
DML에 따른 Call 통계 예시
[예시1] delete
- Parse Call : 1
- Execute Call : 1
call count cpu elapsed disk query current rows
Parse 1 0.00 0.00 0 61 0 0
Execute 1 0.00 0.00 0 4 3 1
Fetch 0 0.00 0.00 0 0 0 0
total 2 0.00 0.00 0 65 3 1
[예시2] insert... select 문
- 클라이언트로부터 명시적인 Fetch Call을 받지 않으며 서버 내에서 묵시적으로 Fetch한다.
create table big_table as
select * from all_tables where rownum <= 10000 ;
call count cpu elapsed disk query current rows
Parse 1 0.18 0.22 0 0 0 0
Execute 1 0.43 0.63 24 7659 401 2759
Fetch 0 0.00 0.00 0 0 0 0
total 2 0.61 0.86 24 7659 401 2759
- Parse Call : 1
- Execute Call : 1
[예시3] Select문
- Select문 실행시 Excetue Call 단계에서는 커서만 오픈한다.
- Select문 실행시 실제 데이터를 처리하는 과정은 모두 Fetch 단계이다.
- sort group by는 Execute 단계에서 처리할 것으로 예상되지만 실제로는 Fetch 시점에 처리한다.
- 실제 데이터를 액세스하면서 일을 시작하는 시점은 첫 번째 Fetch Call 인 것을 짐작한다.
select owner, count(*) from big_table group by owner ;
call count cpu elapsed disk query current rows
Parse 1 0.00 0.00 0 1 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 0.01 0.00 0 88 0 18
total 3 0.01 0.00 0 89 0 18
- Parse Call : 1
- Execute Call : 1
- Fetch Call : 1
[예시4] for update 구문
- Execute Call 단계에서 모든 레코드를 읽어 Lock을 설정한다.
- 10,000건의 레코드가 있는 테이블을 for update 구문을 사용하여 실행시켰을때 Execute 단계에서 이미 Current모드로 읽어 10,000개 레코드 전체에 대해 Lock을 설정한다.
select * from big_table for update ;
call count cpu elapsed disk query current rows
Parse 1 0.02 0.00 0 1 0 0
Execute 1 0.03 0.03 4 88 10178 0
Fetch 11 0.03 0.02 0 115 0 101
total 13 0.08 0.06 4 204 10178 101
- Parse Call : 1
- Execute Call : 1
- Fetch Call : 11