1.1 - SQL 파싱과 최적화
SQL
원하는 결과집합을 SQL 구문으로 구조적, 집합적으로 선언하지만 그 결과집합을 만드는 과정은 절차적일 수 밖에 없다.
즉, 프로시저가 필요한데 그 프로시저를 만들어내는 DBMS 내부엔진이 바로 SQL 옵티마이저이다.
사용자 --SQL--> 옵티마이저 --실행계획--> 프로시저
SQL 최적화
최적화 과정
1. SQL 파싱, SQL 파서가 파싱을 진행한다.
- 파싱트리 생성
- Syntax 체크 - 문법적 오류 체크
- Semantic 체크 - 의미상 오류 체크
2. SQL 최적화
- 옵티마이저가 그 역할을 맡는다.
SQL 옵티마이저는 미리 수집한 시스템 및 오브젝트 통계 정보를 바탕으로 다양한 실행경로를 생성해서 비교한 후 가장 효율적인 하나를 선택한다.
3. 로우소스 생성
- SQL 옵티마이저가 선택한 실행경로를 실제 실행 가능한 코드 또는 프로세스의 형태로 포멧팅하는 단계
@ 실행계획에서 비용(Cost)은 쿼리를 수행하는 동안 발생할 것으로 예상하는 I/O 횟수 또는 시간을 의미함.
1.2 - SQL 공유 및 재사용
SQL 파싱, 최적화, 로우 소스 생성 과정을 거쳐 생성한 내부 프로시저를 반복 재사용할 수 있도록 캐싱해 두는 메모리 공간을 '라이브러리 캐시' 라고 한다.
SGA(System Global Area)는 서버 프로세스와 백그라운드 프로세스가 공통으로 엑세스하는 데이터와 제어 구조를 캐싱하는 메모리 공간이다.

SQL 소프트 파싱, 하드 파싱 차이
SQL 소프트 파싱
사용자 -> SQL 파싱 -> 라이브러리 캐시에 존재 -> 실행
SQL 하드 파싱
사용자 -> SQL 파싱 -> 라이브러리 캐시에 미존재 -> SQL 최적화 -> 로우 소스 생성 -> 실행
1.2.2 바인드 변수의 중요성
이름 없는 SQL 문제
공유 가능 SQL
- 바인드 변수로 파라미터 Driven 방식으로 SQL 을 작성해야 파라미터만 다르고 같은 로직을 실행하는 SQL 프로시저가 무한정 생성되지 않아서(소프트 파싱 되어서) 성능 향상에 유리하다.
댓글