인덱스 생성 시 아키텍쳐?
인덱스를 생성할 때 우선 데이터의 정렬이 필요하며 정렬은 PGA의 정렬공간(Sort Area)을 활용하여 정렬을 한다. 정렬공간보다 큰 정렬작업의 경우에는 Temp Tablespace를 사용하게 된다
PGA(Program Global Area, Process Global Area)
서버 프로세스 마다 각각 부여되는 독점으로 사용하는 메모리 공간이다.
PGA는 아래와 같은 영역으로 구성되어 있다.
이름 |
설명 |
변수 저장 영역 (Stack Space) |
SQL문장에서 바인드 변수를 사용할 경우, 바인드 변수 값 저장 영역 |
세션 정보 (Session info) |
서버 프로세스에 의해 추출 결과 값을 유저 프로세스로 전달을 위해 유저 프로세스의 세션 정보 저장 영역 |
커서 상태 정보 (Cursor State) |
각 프로세스가 사용하는 SQL 파스 정보 저장되어 있는 공유 풀의 물리적 위치 주소 저장영역 |
SQL작업공간 (Work Area) |
SQL이 요청한 작업 수행 영역 |
그 중 SQL 작업공간에 가장 많은 공간을 할당하며 정렬작업이 주로 사용되어 정렬 공간
(Sort Area)라고 한다.
SQL 작업공간을 사용하는 정렬 작업 관련 쿼리는 아래와 같다.
============================================================================
- ORDER BY, GROUP BY, ROLLUP절 사용
- DISTINCT, UNION, MINUS, INTERSECT 구문 사용
- 분석 함수 사용
- 인덱스 생성
- 비트맵 인덱스 사용 시 비트맵 연산 수행
- 소트 머지 조인, 해시 조인 수행
- 통계정보 생성
============================================================================
인덱스 생성 시 사용하는 정렬 공간의 메모리 부족 시 Temp tablespace에 위치한 임시 세그먼트를 사용하게 되며, 이때 디스크I/O가 발생한다.
또한 Temp 영역(PGA내의 정렬공간보다 큰 작업일 시)과 정렬 공간을 사용하여 정렬한 데이터들은 인덱스가 생성 될 테이블스페이스에 내려써지면서 TEMP Segment 타입의 형태와 오라클이 임의로 지정한 이름의 형태로 내려쓰게 된다. 다 내려 쓰여진 인덱스는 유저가 정의한 인덱스명과 index 타입으로 다시 변경 된다.
'Oracle > 아키텍쳐' 카테고리의 다른 글
Character Set (1) | 2020.04.20 |
---|---|
오라클 19c 아키텍쳐 소개 (0) | 2020.03.05 |
인덱스 스플릿(INDEX SPLIT) (0) | 2019.12.30 |
오라클 메모리 파라미터 (0) | 2019.04.15 |
오라클 필수 백그라운드 프로세스 (0) | 2019.04.09 |
댓글