SQL 처리 Process
Stages of SQL Processing
1. SQL Statement
: client가 쿼리 질의
2. Syntax Check
: 문법적인 검사 수행
예시) SQL 질의에서 FROM 오타
SQL> SELECT * FORM emp; SELECT * FORM emp * ERROR at line 1: ORA-00923: FROM keyword not found where expected
3. Semantic Check
: 의미 상 검사 수행(오브젝트 유무 등)
예시) emp2 테이블이 존재하지 않는데 질의
SQL> SELECT * FROM emp2; SELECT * FROM emp2 * ERROR at line 1: ORA-00942: table or view does not exist
4. Shared Pool Check
① 해시 함수로부터 쿼리의 해시 값(V$SQL.SQL_ID) 얻음
② Shared pool의 Library cache에서 해시 값을 찾음(동일한 쿼리가 캐시에 저장되어 있는지 검색)
4.1. Soft Parsing(Library cache hit)
: Library cache에서 해시 값을 찾은 경우 -> 함께 저장된 실행계획과 Execution 수행
4.2. Hard Parsing(Library cache miss)
: Library cache에서 해시 값을 못 찾은 경우 -> Optimization 작업 수행
5. Optimization
: 쿼리의 실행 계획을 뽑고, 각각의 cost 평가
예시) 아래 쿼리에 대한 실행 계획
SELECT e.last_name, j.job_title, d.department_name FROM hr.employees e, hr.departments d, hr.jobs j
WHERE e.department_id = d.department_id AND e.job_id = j.job_id AND e.last_name LIKE 'A%';
Execution Plan ---------------------------------------------------------- Plan hash value: 975837011 -------------------------------------------------------------------------------- | Id| Operation | Name |Rows|Bytes|Cost(%CPU)|Time | -------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 3 | 189 | 7(15)| 00:00:01 | |*1 | HASH JOIN | | 3 | 189 | 7(15)| 00:00:01 | |*2 | HASH JOIN | | 3 | 141 | 5(20)| 00:00:01 | | 3 | TABLE ACCESS BY INDEX ROWID| EMPLOYEES | 3 | 60 | 2 (0)| 00:00:01 | |*4 | INDEX RANGE SCAN | EMP_NAME_IX | 3 | | 1 (0)| 00:00:01 | | 5 | TABLE ACCESS FULL | JOBS | 19 | 513 | 2 (0)| 00:00:01 | | 6 | TABLE ACCESS FULL | DEPARTMENTS | 27 | 432 | 2 (0)| 00:00:01 | --------------------------------------------------------------------------------
6. Row Source Generation
: 최적의 실행 계획을 받아 row source tree 제작
예시) 5번 실행계획에 대한 row source tree
7. Execution
: row source tree 각각의 row source를 실행하고 그 결과를 client로 보냄
[참고]
https://docs.oracle.com/database/121/TGSQL/tgsql_sqlproc.htm#TGSQL178
http://www.gurubee.net/lecture/2392
http://ojc.asia/bbs/board.php?bo_table=LecOrccleTun&wr_id=113
https://hayleyfish.tistory.com/65
'DB' 카테고리의 다른 글
SQLD 자격증 보수 교육 (0) | 2024.07.24 |
---|---|
ORA-28001 : the password has expired (0) | 2019.12.02 |
Oracle 11g XE sid 변경 (2) | 2019.11.13 |