본문 바로가기

Oracle DB

세그먼트와 OWI

 

- 세그먼트 개요

세그먼트는 테이블, 인덱스, 언두, LOB 등 오라클이 제공하는 모든 종류의 논리적인 공간을 말한다. 오라클은 사용된 공간과 아직 사용되지 않은 공간을 구분하는 표식인 고수위선(HWM)이 있다. HWM은 세그먼트 헤더 블록에 그 정보가 저장된다. 오라클은 세그먼트 공간관리기법으로 FLM(수동관리)와 ASSM(자동관리)가 있다. 테이블스페이스 생성 시 부여하는 segment space management 속성에 의해 기법이 결정된다.

 

 

- FLM (FreeList Management, 수동 세그먼트 공간 관리)

프리리스트란 프리 블록을 링크드 리스트 형태로 관리하는 기법을 말한다. 세그먼트 헤더 블록에서는 프리리스트의 헤더 위치와 테일 위치를 관리한다. 개별 데이터 블록에는 블록이 프리리스트에 존재하는지 여부와 다음 프리 블록의 위치 정보를 가지고 있다. 이러한 정보들이 조합되어 프리리스트를 이룬다.

오라클은 세그먼트 별로 기본적으로 하나의 마스터 프리리스트를 할당하며 세그먼트 생성 시 FREELIST 속성 값에 할당된 수만큼 프로세스 프리리스트를 사용한다. 개별 프로세스가 프리 블록을 필요로 하는 시점에 마스터 프리리스트로부터 필요한 수의 프리 블록을 얻어온다. 마스터 프리리스트에 더 이상 프리 블록이 없으면 오라클은 HW락을 획득하고 HWM을 이동해서 프리블록을 확보하게 된다. 또한 기존에 풀 상태였던 블록을 프리 블록으로 바꾸게 되면 트랜잭션 프리리스트를 생성한다. 트랜잭션 프리리스트는 트랜잭션에 의해 프리 블록으로 변경된 블록들을 저장하며, 프로세스는 트랜잭션이 유지되는 동안은 가능하면 트랜잭션 프리리스트를 사용한다.

프리리스트 개수가 지나치게 작다면 프리리스트에서 경합이 발생하게 되고 이로 인해 buffer busy waits 이벤트를 대기하는 현상이 생길 수 있다. 오라클은 프리리스트 경합을 줄이기 위해 프리리스트 그룹이라는 기능을 제공한다. 하나의 프리리스트 그룹은 독립적인 마스터 프리리스트와 프로세스 프리리스트를 가지며, 하나의 세그먼트가 여러 개의 프리리스트 그룹을 포함한다.

 

- ASSM(Automatic Segment Space Management, 자동 모드의 세그먼트 공간 관리)

ASSM을 사용할 경우 프리 블록에 대한 모든 정보들은 비트맵 블록에서 관리된다. 루트노드는 L3, 브랜치는 L2, 리프는 L1이다. 하나의 L1 BMB은 DBA 범위를 관리한다. DBA 범위는 익스텐트 경계를 벗어나지 않는 연속된 블록들의 모임을 의미한다. 모든 블록의 여유 공간 정보가 비트맵 블록에서 관리되기 때문에 FLM에서 사용한 프리리스트 구조는 사용하지 않는다. 또한 HWM의 이동도 내부 알고리즘에 의해 자동으로 이루어진다. ASSM에서 하나의 세그먼트에 대해 포맷이 이루어진 Low HWM이하 블록들, 포맷되지 않은 High HWM 이상의 블록들로 두 개의 HWM을 관리한다.

 

 

 

'Oracle DB' 카테고리의 다른 글

리두와 OWI  (0) 2021.04.02
I/O와 OWI  (0) 2021.04.02
트랜잭션과 OWI  (0) 2021.04.02
Shared Pool / Library Cache와 OWI  (0) 2021.04.02
버퍼캐시와 OWI  (0) 2021.04.02