데이터베이스

Oracle FreeList (프리리스트)

1. FreeList란?

FreeList(프리리스트)는 Oracle 데이터베이스에서 새로운 데이터가 삽입될 때 사용할 수 있는 빈 블록 목록입니다.
즉, INSERT 작업이 수행될 때, 사용 가능한 공간이 있는 블록을 찾는 역할을 합니다.

FreeList의 역할

  • INSERT 성능 향상: 새로운 데이터 삽입 시 사용 가능한 블록을 빠르게 찾음
  • 병렬 처리 최적화: 여러 세션에서 동시 INSERT 시 블록 경합(Contension) 방지
  • 공간 활용 최적화: DELETE 후 공간을 재활용할 수 있도록 관리

2. FreeList 동작 방식

Oracle의 테이블이나 인덱스는 데이터를 저장할 때 블록(Block) 단위로 관리됩니다.
새로운 데이터가 삽입될 때, FreeList에서 빈 블록을 먼저 검색하여 데이터를 저장하며, FreeList에 사용 가능한 블록이 없으면 새로운 블록을 할당합니다.

(1) FreeList가 있는 경우

INSERT 수행 시 FreeList에서 사용 가능한 블록을 찾아 삽입
블록 경합 없이 빠르게 데이터 저장 가능

📌 예제

INSERT INTO employees VALUES (1001, 'John Doe', 'IT');

결과: FreeList에서 빈 블록을 찾아 데이터를 저장 (HWM 증가 없음)

(2) FreeList가 부족한 경우

FreeList에 빈 블록이 없으면 새로운 블록을 할당 (HWM 증가 발생)
병렬 트랜잭션이 많을 경우, 블록 경합으로 인해 성능 저하 발생

📌 해결 방법

  • FreeList 개수를 증가하여 병렬 INSERT 시 충돌 방지
  • DELETE 후 FreeList에 공간이 추가되지 않으면 HWM을 조정(SHRINK)

3. FreeList의 관리

FreeList는 STORAGE 파라미터를 통해 테이블이나 인덱스 단위로 설정할 수 있습니다.

(1) FreeList 개수 확인

📌 테이블의 FreeList 개수 조회

SELECT SEGMENT_NAME, FREELISTS
FROM DBA_SEGMENTS
WHERE SEGMENT_NAME = 'EMPLOYEES';

📌 인덱스의 FreeList 개수 조회

SELECT INDEX_NAME, FREELISTS
FROM DBA_INDEXES
WHERE INDEX_NAME = 'EMP_IDX';

(2) FreeList 개수 조정

테이블의 FreeList 개수를 늘리면 병렬 INSERT 성능을 최적화할 수 있습니다.

📌 FreeList 개수 증가 (INSERT 성능 향상)

ALTER TABLE employees STORAGE (FREELISTS 10);

결과: FreeList 개수를 10개로 늘려 동시에 여러 세션이 INSERT할 때 경합을 줄임

📌 인덱스 FreeList 개수 증가

ALTER INDEX emp_idx STORAGE (FREELISTS 5);

결과: 인덱스도 여러 개의 FreeList를 가질 수 있도록 설정

4. FreeList 활용 예제

(1) 병렬 트랜잭션에서 FreeList 최적화

문제점: 여러 세션에서 동시 INSERT 시 FreeList가 부족하여 블록 경합 발생

INSERT INTO sales VALUES (seq.nextval, 'ProductA', 100);

결과: FreeList가 부족하면 세션 간 블록 할당 충돌이 발생하여 성능 저하

해결 방법: FreeList 개수 증가

ALTER TABLE sales STORAGE (FREELISTS 8);

결과: 병렬 트랜잭션이 동시에 INSERT할 때 경합 없이 빈 블록을 빠르게 찾음성능 향상

(2) DELETE 후 FreeList 재사용

문제점: DELETE 후에도 FreeList가 자동으로 복구되지 않으면 INSERT 시 성능 저하

DELETE FROM orders WHERE order_date < '2023-01-01';

결과: DELETE가 발생했지만 FreeList가 즉시 반영되지 않음

해결 방법: FreeList 강제 반환 (ALTER TABLE SHRINK)

ALTER TABLE orders ENABLE ROW MOVEMENT;
ALTER TABLE orders SHRINK SPACE;

결과: FreeList가 최신화되어 새로운 데이터가 기존 블록을 재사용할 수 있도록 설정

5. FreeList Group (Freelist Group)

FreeList Group은 RAC (Real Application Clusters) 환경에서 여러 개의 FreeList를 관리하기 위한 기능입니다.

📌 FreeList Group 개수 조정

ALTER TABLE sales STORAGE (FREELIST GROUPS 4);

결과: RAC 환경에서 각 노드별로 독립적인 FreeList를 유지하여 성능 최적화

zerg96

Recent Posts

요양원 선택 전 반드시 확인해야 할 것들, 부모님 맡기기 전에 보세요

요양원 선택 전 반드시 확인해야 할 체크리스트를 공개합니다. 공식 평가 자료 조회법, 방문 시 확인…

2일 ago

공공기관 채용 비리, 내부에서 터져나온 충격 증언

공공기관 채용 비리의 실태와 피해 지원자의 대응법을 정리했습니다. 채용 비리 신고 방법, 공익신고자 보호제도, 취준생…

2일 ago

주식 손실 났을 때 세금 줄이는 방법, 아는 사람만 씁니다

주식 손실을 세금 절약에 활용하는 합법적 방법을 공개합니다. 해외주식 손익통산, ISA 계좌 활용, 연금계좌 절세까지…

2일 ago

음식 배달 늦으면 소비자가 취소할 수 있다, 몰랐던 권리

배달이 예상 시간보다 크게 늦으면 취소·환불을 요청할 수 있습니다. 배달앱별 지연 취소 방법과 잘못 배달됐을…

2일 ago

휴대폰 요금제 바꾸면 연 수십만원 절약, 지금 내 요금제 확인하세요

통신비 절약의 핵심은 요금제 최적화입니다. 내 데이터 사용량 확인법, 알뜰폰 전환 비교, 위약금 없이 요금제…

2일 ago

퇴직금 못 받았다면, 지금 당장 이렇게 하세요

퇴직 후 퇴직금을 받지 못했다면 즉시 노동부에 신고하세요. 지급 기한, 자격 요건, 신고 방법, 소액체당금…

2일 ago