2. SQL 처리구조
▶Oracle Architecture
Oracle Server =Instance + Database
Instance =SGA Memory + Background Processes
Oracle Process =Background Process + Server Process
Server Process =Dedicated or Shared (MTS)
Database =Datafile + Redolog file + Control file + Parameter file
SGA Memory =Shared Pool + Buffer Cache +Log buffer
Shared Pool =Library Cache + Dictionary Cache + ……
▶Shared pool : SQL 수행 시 자주 사용되는 정보들을 공유
Library cache |
SQL 및 PL/SQL 공유 |
Row Cache |
SQL 연산에 참조되는 각종 딕셔너리 정보 공유 |
▶Shared SQL Area
- SQL문장을 실행하기 위해 그 문장과 관련된 실행 계획과 구문분석 정보 보관
- 동일한 SQL문장은 서로 공유된다. (구문 분석 시간 감소 및 메모리 공유)
▶SQL Execution Plan/Parse Tree
- 어떤 방식으로 SQL문을 실행할 것인지 정해놓은 계획(구문분석단계)
- 최소한의 비용이 들도록 SQL옵티마이저(최적기)가 작성한다.
- 주변 환경을 고려하여 실행 경로 판단.
# 인덱스를 제일 먼저 본다. - 테이블 인덱스를 사용할 것인가? - 한 테이블에 인덱스가 여러 개의 경우 어떤 것을 사용할 것인가? # 조인 - 두 테이블 간에 어떤 조인을 수행할 것인가? - 테이블 간의 조인을 어떤 순서로 할 것인가? # 사용자의 힌트를 어떻게 처리할 것인가? |
▶구문분석
▷커서의 공유
* 이미 수립된 실행계획을 공유해서 재 사용 (구문분석비용감소 / 메모리 사용개선)
* 동일한 SQL 문장이란?
- 텍스트 동일(대소문자 구분, 빈 칸, 주석 포함)
- 사용자 및 참조 객체도 동일
- 바인드 변수의 데이터 형식 동일
* SQL 형식 표준을 정하여 코딩
- 대소문자, 빈칸, 주석 사용 규칙(아예 SQL에 주석사용금지 등)
- SQL문장을 동일한 위치에 따로 관리
- 자주 쓰는 것은 PL/SQL로 대치
Q&A) library cache는 래치가 두개입니다. 부모LCO조회하기 위해 잡아야 되는 건 librarycache lock , 자식LCO는 library cache pin
▶Recursive SQL
* 단일 SQL문장이라도 파생적인 SQL실행 발생
* SQL문장 수행중에 내부적으로 수행되는 SQL
- SQL 구문 분석 단계 - SQL문장의 semantic 검증 / data dictionary 정보 질의
- DDL문장 수행 중 - 데이터 변경에 의해 DB구조변경 / data dictionary 정보 변경