SQL 처리 과정
옵티마이저가 SQL을 어떻게 처리하는지, 서버 프로세스는 데이터를 어떻게 읽고 저장하는지 이해를 해야 한다. SQL은 'Structured Query Language'의 줄임말이다. SQL은 기본적으로 구조적이고 집합적이고 선언적인 질의 언어다. 원하는 결과집합을 구조적, 집합적으로 선언하지만, 그 결과집합을 만드는 과정은 절차적일 수밖에 없다. 즉, 프로시저가 필요한데, 그런 프로시저를 만들어 내는 DBMS 내부 엔진이 바로 SQL 옵티마이저다. 옵티마이저가 프로그래밍을 대신해 주는 셈이다.
Parse
Parse
1)Syntax(문법검사) : keyword 검사, 배치검사 (오라클 키워드 select, from, where ....)
2)Semantic
2-1)권한검사:접속한 사용자의 권한에 관한 검사
2-2)의미검사 : *, emp 등의 컬럼명이나 테이블명 등 사용자가 만든 것들에 대한 검사
3)실행계획 생성
3-1)Soft Parse : SQL의 실행계획이 Library Cache에 존재한다면 바로 Excute로 넘어간다.
3-2)Hard Parse : Optimizer를 통해 실행계획을 생성
SQL 최적화
1.SQL 파싱
2.SQL 최적화
SQL 옵티마이저는 미리 수집한 시스템 및 오브젝트 통계정보를 바탕으로 다양한 실행경로를
생성해서 비교한 후 가장 효율적인 하나를 선택한다.
데이터베이스 성능을 결정하는 가장 핵심적인 엔진이다.
3.로우 소스 생성
SQL 옵티마이저가 선택한 실행경로를 실제 실행 가능한 코드 또는 프로시저 형태로 포맷팅하는 단계다.
로우 소스 생성기(Row-Source Generator)가 그 역할을 맡는다.
옵티마이저 최적화 과정
1. 사용자로부터 전달받은 쿼리를 수행하는 데 후보군이 될만한 실행계획들을 찾아낸다.
2. 데이터 딕셔너리에 미리 수집해 둔 오브젝트 통계 및 시스템 통계정보를 이용해
각 실행계획의 예상비용을 산정한다.
3. 최저 비용을 나타내는 실행계획을 선택한다.
옵티마이저 힌트
자신만 아는 정보나 경험을 활용해 더 빠르게 실행할 수 있도록 통계정보에 담을 수 없는
데이터 또는 업무 특성을 활용해 개발자가 직접 더 효율적인 액세스 경로를 찾아낸다.
힌트 유의사항
1. ,를 사용하면 그 앞까지만 유효하다
2. 테이블을 지정할때 스키마명까지 명시하면 안된다.
3. FROM절 테이블명에 ALIAS를 지정했다면, 힌트에도 반드시 ALIAS를 사용해야 한다.
Excute
구문분석이 정상적으로 실행되면 서버 프로세스는 메모리 영역의 데이터베이스 버퍼 캐시 영역을 검색하여
해당 테이블이 다른 사용자의 다른 SQL문에 의해 이미 데이터버퍼 캐시영역에 존재하는지를 검색합니다.
만약, 존재하지 않는다면 정의된 테이블의 해당 데이터 파일로부터 테이블을 읽어서 데이터버퍼
캐시영역에 저장합니다.
만약, 사용자가 UPDATE, DELETE, INSERT문을 실행하였다면 데이터 버퍼캐쉬 영역에서 새로운 데이터로
변경, 삭제 또는 입력하게 됩니다.
Fetch
실행단계가 끝나면 서버 프로세스는 데이터버퍼 캐쉬영역에서 관련 데이터를 읽어서 사용자의 클라이언트
화면에 보여줍니다.
단, SELECT문을 실행하는 경우에만 FETCH단계가 실행되고, UPDATE, ISNERT, DELETE문 실행 시는 인출단계는
실행되지 않습니다.
실행계획을 공유하지 못하는 경우와 개선 방향
실행 계획을 공유하지 못하는 경우
1. 공백문자 혹은 줄바꿈
2. 대소문자 구분
3. 주석
4. 테이블 Owner 표시
5. 옵티마이저 힌트 사용
6. 조건절 비교 값 변화
'오라클 > 오라클 튜닝' 카테고리의 다른 글
오라클 HINT (0) | 2021.12.04 |
---|---|
인덱스 개요 (0) | 2021.12.04 |
실행계획 용어 정리 (0) | 2021.12.03 |
실행계획 읽는 순서 (0) | 2021.12.03 |
오라클 DB 구조 (0) | 2021.12.03 |