상세 컨텐츠

본문 제목

2024년 2월 2일 1교시 ShP, select 문의 처리단계 1. parse

오라클 퍼포먼스 튜닝

by 병아리 엔지니어 2024. 2. 2. 10:46

본문

 

★ SGA (System Global Area)

- 오라클의 공유 메모리

- 이 안의 모든 데이터는 다른 유저들과 공유한다.

 

1. Shared Pool (ShP)

쉐어드 풀은 900개가 넘어가는 컴포넌트들로 이루어져 있지만

우리는 그 중에서 두 가지에만 주목하면 된다:

 

① Library Cache (LC) : SQL문과 PL/SQL문이 저장되어 있는 메모리

② Data Dictionary Cache (DDC) : 딕셔너리 정보들이 저장되어 있는 메모리

 

- 세션 정보도 쉐어드 풀이 가지고 있다.

- 쉐어드 풀의 크기는 shared_pool_size 라는 파라미터로 조정한다.

- shared server 환경: 서버 프로세스를 공유한다.

    - SQL 문장을 처리하는 프로세스 (서버 프로세스) 를 공유

    - 반대 개념: dedicated server 환경 (유저와 서버 프로세스가 일대일)

    - 쉐어드 서버 환경을 사용할 경우 UGA(User Global Area) 가 ShP 안에 포함된다.

       (서버 프로세스 안의 SQL 문 처리 영역인 커서는 UGA 안에 저장된다)


 

 

★ select 문의 처리 단계 (DML 은 3 단계, select 문은 4단계)

 

SELECT employee_id, last_name, salary

FROM hr.employees

WHERE employee_id  = 100;

 

1. parse

 

parse 1) 문법 체크, 의미 분석 체크 (유저 / 테이블 / 컬럼 등에 대한 체크), 권한 체크

          - 문법 체크 컴파일러는 서버 프로세스 안에 있다.

            (문법 체크시에는 딕셔너리 정보를 참고하지 않는다, 서버 프로세스 안에 필요한 정보가 다 있으므로)

          - 의미 분석과 권한 정보는 데이터 딕셔너리 테이블이 가지고 있다.

          - 데이터 딕셔너리 테이블들은 실제로는 디스크 안의 시스템 테이블스페이스에 저장되어 있지만

            의미 분석과 권한 체크를 할 때마다 디스크로 내려가려면 너무 I/O 가 많이 발생하므로

            필요한 딕셔너리 정보들을 먼저 DBC 에 올리고

             > DBC 안의 딕셔너리 정보들만 따로 모아 ShP 안의 DDC 에 저장해 놓는다.

            (의미 분석과 권한 체크를 빨리 하기 위해서 딕셔너리 정보들만 따로 모아놓는 것)

          - 만약 DDC 에서 딕셔너리 정보를 찾아봤는데 없으면 > DBC 로 딕셔너리 정보를 찾으러 간다.

            (DBC 로의 접근비용 발생)

 

parse 2) 동일한 SQL 문이 쉐어드 풀 메모리 안 라이브러리 캐시 안에 있는지 조회

          - 동일한 SQL 문이 있으면: 실행계획을 공유하기 위해서

          - 동일한 SQL 문이 LC 안에 있는지는 라이브러리 캐시 래치 Library Cache Latch를 잡고 검색해야 한다.

          - 래치는 CPU 개수에 종속된다.

          - 래치 라이브러리 캐시 웨이트 이벤트 latch: library cache wait event

            : LB 안에서 동일한 SQL문이 있는지 검색하는 다른 유저들이 모든 래치를 다 잡고 있으면

              먼저 래치를 잡은 유저들의 작업이 끝날 때까지 기다려야 하는데

              그 때 발생하는 것이 래치 라이브러리 캐시 웨이트 이벤트

              (메모리가 너무 크면 래치 점유시간이 길어져 이 웨이트 이벤트가 과도하게 발생할 수 있다.)

          - LB = 전화번호부 책, 그 안의 목차(ㄱ, ㄴ, ㄷ, ...) = 해시 값

          - 만약 동일한 SQL 문이 ShP 안의 LC 안에 없다면 (= 소프트 파싱 soft parsing 이 실패하면)

            > 하드 파싱 hard parsing 이 발생한다.

 

parse 3) 하드 파싱 hard parsing

          - 실행 계획을 새롭게 생성해야 한다.

          - 자세한 내용은 2교시에서...

 

2. bind

 

3. execute

 

4. fetch

관련글 더보기