
1. parse
- 문법(syntax)검사 -> 의미(semantic)검사 -> 권한 검사 -> 실행 계획 생성
- 메모리에 실행 계획 만든다.
- 실행계획 : 데이터를 어떻게 찾아오는게 가장 좋은지(데이터 엑세스방법 : rowidscan / fulltablescan)
2. bind
- 변수에 실제값이 들어가는 단계
- SQL 문장의 변수처리 : select * from employees where employee_id = :v_id;
- 변수처리하는 이유는 실행계획을 sharing하기 위해서이다.
- sql문장의 실행계획을 sharing하려면 대소문자, 공백문자, tap키, enter키, 주석문자, 힌트, 상수값, 리터럴값이 다 맞아야한다.
- 실행계획 sharing 못하면 실행계획을 만들어야한다. -> CPU 사용량과 디스크 I/O 사용량 증가 -> 속도 느려짐
- 따라서 변수처리를 해야하는데 sql은 비절차언어이므로 변수처리가 어렵다. 따라서 다른 응용프로그램을 같이 써야한다.
- 변수처리하지 않으면 bind 단계를 스킵한다.
3. execute
- 이단계까지는 실행 계획이 무효화가 발생하지 않도록 핀을 찍어놓는다.
- 실행계획이 무효화 발생될때 : 통계수집, 테이블 drop, 테이블 구조바뀜, 인덱스 생성/인덱스 삭제 등
4. fetch
- 무효화 발생해도 상관없으므로 핀 해제
- 메모리에 올려놓은걸 유저에게 전달한다.
- 디스크 I/O발생(block을 찾고 변경하는 작업)
- DML은 패치단계가 없다.
- DML문 처리단계 : parse -> bind -> execute(I/O발생)
반응형
'컴퓨터 > SQL' 카테고리의 다른 글
오라클 SQL - Top - N 분석 (0) | 2020.03.19 |
---|---|
오라클 SQL 오류 모음 (0) | 2020.02.29 |
오라클 SQL - ROWID와 INDEX (0) | 2020.02.16 |
오라클 SQL - Data 처리 방법 (0) | 2020.02.14 |
오라클 SQL - 시퀀스(Sequence) 사용하기 (0) | 2020.02.13 |