독서

[개발자를 위한 인덱스 생성과 SQL 작성 노하우] 오라클 블록 옵션

오렌지색 귤 2022. 3. 16. 13:20
반응형

세 줄 요약

 

블록 공간을 효율적으로 관리하기 위해 PCTFREE, PCTUSED 옵션을 사용한다

 

PCTFREE의 기본값은 10%, PCTUSED 기본값은 40%이며, 대부분의 DBA는 그대로 사용한다

 

단, 요즘에는 오라클 내부에서 PCTUSED를 자동으로 제어하므로 PCTFREE만 설정해주면 된다

 

 

 

 


PCTFREE 와 PCTUSED 블록 옵션

 

블록

  • 데이터 I/O의 가장 작은 단위이자 할당될 수 있는 공간의 가장 작은 단위
  • 결국 블록이란 저장의 기본 단위이고, 운반(조회)의 최소 단위라 할 수 있다

 

PCTFREE

  • 변경 작업에 따라 데이터 블록에 저장된 로우 데이터의 행 크기가 증가할 상황에 대비한 여유 공간
  • 기본값은 10%

 

PCTUSED

  • 블록 재사용 여부를 결정하는 요소로서, 데이터가 사용하는 공간이 설정값 이하이면 해당 블록을 재사용할 수 있다
  • 기본값은 40%

 

 

CREATE TABLE USER. "고객"
(
	"고객번호"    CHAR (10) DEFAULT ' ' NOT NULL,
  "성명"        VARCHAR2 (30) DEFAULT ' ' NOT NULL,
	"나이"        NUMBER (3) DEFAULT 0 NOT NULL
)
TABLESPACE USER_FILE_01
PCTFREE 10   /////////////////////////////// DEFAULT 10%로 설정
PCTUSED 40   /////////////////////////////// DEFAULT 40%로 설정
INITRANS 1
MAXTRANS 255
STORAGE
(
	INITIAL 65536
	NEXT 1048576
	MINEXTENTS 1
	MAXEXTENTS UNLIMITED
	BUFFER_POLL DEFAULT
)
LOGGING
MONITORING;

 

저수조의 예시를 들어보자

 

PCTFREE는 물이 차면 모터를 멈추게 하는 센서 역할

 

PCTUSED는 물이 떨어졌을 때 모터를 가동시키는 센서 역할

 

 

 

 

 

상단의 그림은 블록을 표현한 그림입니다

 

위 10%는 PCTFREE, 아래 40%는 PCTUSED입니다

 

 

 

 

 

그러면 10%는 왜 남기는 걸까?

 

해당 블록에 데이터가 90% 쌓여 PCTFREE 설정값인 10%에 이르면, 블록 사용을 차단한다

 

그 이유는 varchar와 같은 컬럼 타입은 업데이트 발생 시, 길이가 늘어날 수 있다

 

길이가 늘어났을 때에도 동일 블록에 저장하기 위해 10%의 예비 공간을 마련해두는 것이다

 

만약 다른 블록에 저장하면, 두 블록을 액세스해야 하므로 속도에 영향을 미친다

 

 

 

그럼 40%는 왜 채우는 걸까?

 

해당 블록에 데이터가 삭제되어 40% 이하가 되면 블록 사용을 승인한다

 

그 이유는 블록을 효율적으로 사용하기 위해서이다

 

40%보다 높은 수치를 필수적으로 채우도록 한다면 빈번하게 블록 사용 금지 및 승인을 해야 하므로 블록 관리에 부하가 발생한다

 

 

 

 

둘의 합이 100에 가까우면 안된다

 

대부분의 DBA는 PCTFREE, PCTUSED 기본 설정값을 그대로 사용한다

 

둘의 합이 100에 가깝게 되면 블록 사용 차단과 승인이 빈번하게 발생하여 블록 관리에 엄청난 부하를 줄 것이다

 

 

 

 

최근에는 어떻게 설정하는가

 

요즘은 PCTFREE만 설정한다

 

PCTUSED는 오라클 9i부터 ASSM (Automatic Segment Space Management, 자동 세그먼트 공간 관리)이 자동으로 관리해준다

 

 

 

 


PS

개발자를 위한 인덱스 생성과 SQL 작성 노하우, 글봄, 이병국 저

반응형