데이터베이스

Oracle FreeList와 HWM(High Water Mark)

1. FreeList와 HWM 개념

Oracle 데이터베이스에서 테이블이나 인덱스에 데이터를 저장할 때, 공간 관리와 성능 최적화를 위해 FreeList와 HWM(High Water Mark)가 중요한 역할을 합니다.

개념설명
FreeList테이블이나 인덱스에서 새로운 데이터가 삽입될 수 있는 여유 공간(블록) 목록
HWM (High Water Mark)테이블에서 한 번이라도 데이터가 기록된 가장 마지막 블록의 위치

2. FreeList (프리리스트)

FreeList란?

  • 테이블이나 인덱스에서 새로운 데이터를 저장할 수 있는 사용 가능한 블록들의 목록
  • 데이터가 삽입될 때, Oracle은 FreeList에서 빈 블록을 검색하여 데이터를 저장
  • FreeList는 세션별로 관리될 수도 있고, 여러 세션이 공유할 수도 있음

FreeList 관리 방식

  1. INSERT 수행 시 FreeList에서 공간이 있는 블록을 선택하여 데이터 저장
  2. UPDATE, DELETE 시 공간이 다시 FreeList에 추가될 수 있음
  3. FULL TABLE SCAN이 수행될 때는 FreeList를 사용하지 않고 HWM까지 읽음

📌 FreeList 개수 조정 예제

ALTER TABLE employees STORAGE (FREELISTS 5);
  • 테이블의 FreeList 개수를 5개로 설정하여 병렬 트랜잭션이 빠르게 빈 공간을 찾을 수 있도록 최적화

FreeList가 중요한 이유

  • FreeList를 잘 관리하면 병렬 INSERT 성능이 향상됨
  • FreeList가 부족하면 세션 간 블록 경합(Contension)이 발생하여 성능 저하

3. HWM (High Water Mark, 고수위선)

HWM이란?

  • 한 번이라도 데이터가 기록된 가장 마지막 블록의 위치
  • Oracle은 데이터를 삽입할 때 HWM을 기준으로 새로운 블록을 사용할지 결정함
  • FULL TABLE SCAN 시, HWM까지의 모든 블록을 스캔하므로 성능에 영향을 줌

HWM의 특징

  • 테이블에서 데이터를 삭제해도 HWM이 줄어들지 않음
  • TRUNCATE 명령을 사용하면 HWM이 초기화됨
  • FULL TABLE SCAN 시 HWM까지 읽기 때문에, 불필요한 I/O가 증가할 수 있음

4. FreeList와 HWM 동작 방식

(1) INSERT 시 FreeList와 HWM의 관계

단계설명
1. 새로운 INSERT 발생FreeList에서 사용 가능한 블록을 찾음
2. 빈 블록이 FreeList에 존재하면FreeList에서 가져와 데이터를 저장
3. FreeList에 빈 블록이 없으면HWM을 증가시켜 새로운 블록 할당

📌 FreeList 사용 예제

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

동작 방식:

  • FreeList에 빈 블록이 있다면 해당 블록을 사용
  • 없다면 HWM을 증가시키고 새로운 블록 할당

(2) DELETE와 HWM

데이터를 삭제해도 HWM이 줄어들지 않음.
즉, FULL TABLE SCAN 시 여전히 삭제된 블록을 스캔해야 하므로 성능 저하 가능.

📌 예제: DELETE 수행 후 HWM 유지됨

DELETE FROM employees WHERE department = 'IT';

문제점:

  • DELETE 후에도 HWM이 유지되므로 FULL SCAN이 불필요한 블록을 포함하여 수행됨
  • HWM을 낮추려면 TABLE REBUILD 또는 SHRINK 필요

(3) HWM 초기화 방법

TRUNCATE 사용 (HWM 초기화)

TRUNCATE 명령어를 사용하면 HWM이 리셋되므로, FULL TABLE SCAN 시 불필요한 블록을 스캔하지 않음.

TRUNCATE TABLE employees;

결과:

  • 테이블의 모든 데이터 삭제 + HWM 초기화
  • FreeList도 재설정됨

SHRINK 사용 (HWM 조정)

SHRINK SPACE 명령을 사용하면 HWM을 낮추면서 데이터를 유지할 수 있음.

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

결과:

  • 불필요한 블록을 반환하여 HWM을 줄임
  • 데이터는 유지되며, FULL TABLE SCAN 시 불필요한 블록을 스캔하지 않음

5. FreeList & HWM 성능 최적화 전략

(1) 병렬 INSERT 시 FreeList 조정

  • 병렬 세션이 많은 경우, FreeList를 늘리면 INSERT 성능이 향상됨
ALTER TABLE sales STORAGE (FREELISTS 10);

결과:

  • 여러 세션이 동시에 INSERT할 때 블록 경합을 줄일 수 있음

(2) DELETE 후 HWM 유지 문제 해결

  1. TRUNCATE 사용sql복사편집TRUNCATE TABLE orders; HWM 초기화 + FreeList 재설정
  2. SHRINK 사용 (데이터 유지 필요 시)sql복사편집ALTER TABLE orders ENABLE ROW MOVEMENT; ALTER TABLE orders SHRINK SPACE; HWM을 낮추면서 데이터 유지 가능

(3) 테이블 분할 (Partitioning) 활용

  • 파티션을 사용하면 특정 데이터만 관리 가능하므로 HWM 문제 해결 가능
CREATE TABLE orders (
order_id NUMBER,
order_date DATE
)
PARTITION BY RANGE (order_date) (
PARTITION p_2023 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD')),
PARTITION p_2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD'))
);

결과:

  • 오래된 데이터만 삭제 가능 → HWM 증가 방지
  • FreeList 관리가 쉬워짐

6. FreeList & HWM 비교 요약

항목FreeListHWM (High Water Mark)
개념사용 가능한 빈 블록 목록한 번이라도 데이터가 저장된 마지막 블록 위치
역할새로운 데이터 삽입 시 사용 가능한 공간 제공FULL TABLE SCAN 범위를 결정
INSERT 시 영향빈 블록이 있으면 재사용, 없으면 HWM 증가FreeList에 공간이 없으면 HWM 증가
DELETE 후 영향FreeList에 공간 추가 가능삭제 후에도 HWM이 줄어들지 않음
최적화 방법FreeList 개수 증가TRUNCATE, SHRINK SPACE 사용
FULL TABLE SCAN 시 영향영향 없음HWM까지 모든 블록을 읽어야 하므로 성능에 영향

7. 결론

FreeList는 INSERT 성능을 향상시키는 핵심 요소이며, HWM은 FULL SCAN 성능에 영향을 미치는 중요한 지표
DELETE를 수행해도 HWM은 줄어들지 않으므로 TRUNCATE 또는 SHRINK를 활용하여 최적화 가능
대량의 데이터를 다루는 경우 FreeList와 HWM을 적절히 관리하면 성능을 크게 개선할 수 있음! 🚀

zerg96

Recent Posts

노트북(윈도우)에서 아이폰 유선 테더링 하기

윈도우 운영체제의 노트북에서는 iPhone 유선 테더링이 잘 안되는 경우가 많습니다. 보통 iPhone의 드라이버가 설치가 안되있어서인…

1주 ago

오라클 래치(Latch)

오라클 데이터베이스의 성능을 논할 때, 내부적으로 발생하는 경합(Contention)은 피할 수 없는 주제다. 특히 다수의 프로세스가…

2주 ago

사장님도 3표, 나도 3표? ‘3%룰’ 완전 정복!

안녕하세요, 혹시 이런 생각해 본 적 없으신가요? "내가 투자한 회사는 누가 감시하고, 어떻게 운영될까?" 오늘은…

3주 ago

Vector Store(벡터 스토어)

'벡터 스토어' 완벽 가이드: AI 시대, 데이터의 새로운 심장을 만나다 IT 업계는 인공지능(AI)이라는 거대한 패러다임의…

4주 ago

Gemini CLI (재미나이 CLI)

1. Gemini CLI란 무엇인가요? Gemini CLI는 터미널 환경에서 직접 Gemini 모델과 상호작용할 수 있도록 만들어진…

4주 ago

과적합 (overfitting)

과적합은 머신러닝에서 학습용데이터를 과하게 학습하여, 실제데이터를 예측하지 못하는 현상을 말합니다. 인공지능(AI)의 학습 방법은 우리가 시험공부를…

1개월 ago