★ 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
2024년 2월 2일 6교시 실행계획 무효화 (0) | 2024.02.02 |
---|---|
2024년 2월 2일 5교시 (0) | 2024.02.02 |
2024년 2월 2일 4교시 오전에 배운 내용 복습 (0) | 2024.02.02 |
2024년 2월 2일 3교시 select 문의 처리단계 3. execute (0) | 2024.02.02 |
2024년 2월 2일 2교시 SQL문의 처리단계 1. parse - 3. 하드 파싱 (1) | 2024.02.02 |