인프라 7기/Oracle
Oracle DB : SELECT문 처리 과정 기술 문서
킹버거
2023. 3. 10. 16:31
1. 사용자가 User Process를 이용하여 Select문을 입력한다.
2. User Process는 입력 받은 Select문을 Server Process에 전달한다.
3. Server Process는 전달 받은 Select문을 파스(Parse) - 실행(Execute) - 추출(Fetch) 과정을 거쳐 수행한다.
- 먼저 파스(Parse)를 수행한다. 파스는 Syntax 검사, Semantics 검사, 실행 계획 확인 순으로 진행된다. Select문에 오타가 있는지 등의 Syntax 검사를 수행한다. Syntax 검사에서 아무런 오타가 검출되지 않는다면, Data Dictionary Cache에서 테이블 및 컬럼에 대한 정보 등 실행에 문제가 없을지 확인하는 Semantics 검사를 수행한다. Semantics 검사에서도 아무런 오류가 발견되지 않는다면, Library Cache에 실행 계획이 있는지 검사한다. 실행 계획 존재 여부 검사는 처리하고자 하는 명령문의 해시코드와 동일한 해시코드가 Library Cache에 존재하는지 확인하는 방식으로 진행된다. 만약 Library Cache에 해당 명령문의 실행 계획이 존재한다면 곧바로 실행 과정에 들어간다. 하지만 Library Cache에 실행 계획이 존재하지 않는다면 실행 계획을 생성하고 해당 명령문의 해시코드와 함께 Library Cache에 저장한다.
- 파스 과정을 마치면, 실행(Execute)을 수행한다. Server Process는 Database Buffer Cache에서 전달 받은 Select문이 요구하는 Table을 검색한다. 만약 Database Buffer Cache에 해당 Table이 존재하지 않는다면, Datafiles에서 Database Buffer Cache로 해당 Table 정보를 동기화한 후 검색한다.
- 실행 과정을 마치면, 마지막으로 추출(Fetch)을 수행한다. Server Process가 실행 과정에서 검색한 Table 정보를 User Process에게 전달한다. 이때 User Process에게 전달하는 Table 정보는 바이너리 코드로 표현되어 있다. User Process는 Fetch 함수를 통해 바이너리 코드 형태의 Table 정보를 User가 읽을 수 있는 형태로 변환하여 화면에 출력해준다.