V-Order와 OPTIMIZE·VACUUM: Lakehouse 테이블 관리 기본
적재를 반복할수록 작은 파일이 쌓여 조회가 느려져요. Fabric의 V-Order 압축과 OPTIMIZE·VACUUM을 UI와 Spark 명령 두 가지 방법으로 언제 어떻게 돌리는지 정리했어요.
카드뉴스
1 / 7
원문: Delta Table Maintenance in Microsoft Fabric 게시일: 2026-03-27 · 저자: Sneha Gunda
레이크하우스에 매일 데이터를 적재하다 보면 어느 순간부터 조회가 눈에 띄게 느려져요. 대부분 원인은 하나예요. 적재할 때마다 작은 파케이 파일이 하나씩 늘어났고, 쿼리 엔진이 그 수많은 작은 파일을 일일이 열어보느라 시간을 다 쓰는 거예요. 삭제·수정을 반복한 흔적도 파일로 그대로 남아 쌓여요. Fabric은 이 문제를 V-Order, OPTIMIZE, VACUUM 세 가지로 다뤄요.
V-Order — 쓸 때 미리 정렬해두는 최적화
V-Order는 파케이 파일을 쓰는 시점에 적용하는 최적화예요. 행 그룹 배치, 인코딩, 압축 방식을 다시 정리해서 나중에 읽을 때 더 빨리 읽히게 만들어요.
- 가장 도움이 되는 경우: 대시보드, 반복 조회처럼 읽기 위주 워크로드예요.
- 트레이드오프: 쓰기 시간이 평균 15% 정도 늘어나는 대신, 압축률은 최대 50%까지 올라갈 수 있어요.
- 호환성: 파일은 여전히 표준 파케이 규격을 지켜서, Z-Order 같은 다른 델타 기능과 함께 써도 문제없어요.
- 기본값: 신규로 만든 Fabric 워크스페이스에서는 V-Order가 기본적으로 꺼져 있어요. 쓰기 위주 데이터 엔지니어링 워크로드의 성능을 우선하기 위한 선택이에요. 읽기 위주 워크로드라면 세션 설정이나 테이블 속성으로 직접 켜야 해요.
OPTIMIZE — 작은 파일을 큰 파일로 병합하기
OPTIMIZE는 작은 파일들을 더 크고 적은 수의 파일로 다시 써서 조회 효율을 높이는 명령이에요. 대량 적재나 변환 작업 뒤에 실행하는 게 일반적이에요.
-- 기본 압축(bin compaction)
OPTIMIZE dbo.table_name
-- 특정 열 기준으로 관련 있는 행을 같은 파일에 모아두기
OPTIMIZE dbo.table_name ZORDER BY (column1, column2)
-- 압축과 동시에 V-Order 적용
OPTIMIZE dbo.table_name VORDER
ZORDER BY는 여러 열을 함께 필터링하는 쿼리(예: 날짜 + 고객ID)가 많고, 그 조건이 충분히 선택적일 때 파일 단위로 건너뛸 수 있는 양을 늘려줘서 효과가 커요. VORDER 키워드를 명시하면 세션이나 테이블 설정과 무관하게 V-Order가 강제 적용되고, 키워드 없이 OPTIMIZE만 실행하면 테이블 속성이나 세션 설정을 그대로 물려받아요.
VACUUM — 더는 안 쓰는 파일 정리하기
OPTIMIZE가 파일을 새로 합쳐 써도, 압축 전에 쓰던 옛날 파일들은 곧바로 사라지지 않아요. 델타 로그가 더 이상 참조하지 않는 파일이라는 걸 확인해야 지울 수 있기 때문이에요. 그 정리를 담당하는 게 VACUUM이에요.
-- 기본 보존 기간(7일)으로 정리
VACUUM schema_name.table_name
-- 보존 기간을 직접 지정 (168시간 = 7일)
VACUUM schema_name.table_name RETAIN 168 HOURS
-- 실제로 지우지 않고 지워질 파일만 미리 확인
VACUUM schema_name.table_name RETAIN 168 HOURS DRY RUN
기본 보존 기간은 168시간(7일)이에요. 이 기간을 7일보다 짧게 주면 안전장치가 걸려 있어서, spark.databricks.delta.retentionDurationCheck.enabled를 직접 꺼주지 않는 이상 경고가 떠요. 보존 기간을 줄이면 그만큼 시간 여행으로 되돌아볼 수 있는 범위도 함께 줄어들고, 동시에 읽고 쓰는 다른 작업에도 영향을 줄 수 있으니 신중하게 판단해야 해요. 그래서 실무 순서는 보통 “OPTIMIZE로 압축 먼저, VACUUM은 그다음”이에요. 압축 전 파일이 남아있는 채로 VACUUM을 건너뛰면 정리할 파일만 계속 쌓여요.
UI로 실행하기 — 우클릭 한 번으로 끝내기
코드를 안 짜도 Fabric 포털에서 바로 실행할 수 있어요.
- 레이크하우스를 열고 Tables 아래에서 대상 테이블을 찾아요.
- 테이블을 마우스 오른쪽 버튼으로 클릭(또는 점 세 개 메뉴)하고 Maintenance를 선택해요.
- Run maintenance commands 대화상자에서 옵션을 골라요.
- 압축을 켜면(On) 작은 파케이 파일을 큰 파일로 합쳐요.
- 압축을 켠 상태에서 Apply V-order 체크박스를 추가로 켤 수 있어요.
VACUUM을 켜면(On) 보존 기간보다 오래된, 더는 참조되지 않는 파일을 지워요.
- Run now로 즉시 실행해요.
- 실행 상태는 포털 상단 알림(Notifications) 패널이나, 왼쪽 메뉴의 Monitoring hub에서
TableMaintenance항목으로 확인할 수 있어요.
반복 실행이 필요하면 Fabric Data Factory 파이프라인의 Lakehouse Maintenance 활동(프리뷰)을 쓰면 돼요. 포털과 같은 옵션(OPTIMIZE + V-order, VACUUM)을 그대로 제공하면서, 데이터 적재 뒤에 이어서 SQL analytics endpoint 새로고침까지 같은 파이프라인에서 체인으로 연결할 수 있어요.
매번 손으로 안 돌려도 되는 방법도 있어요
세 명령을 매번 사람이 판단해서 돌리기 번거롭다면, Fabric은 자동화 경로도 열어뒀어요. **자동 압축(auto compaction)**을 켜두면 쓰기 작업이 끝날 때마다 파티션 상태를 평가해서, 작은 파일이 너무 많이 쌓였다고 판단되는 순간 그 파티션에 한해 OPTIMIZE를 자동으로 실행해요. 필요할 때만 압축이 일어나는 구조라 정해진 스케줄로 OPTIMIZE를 돌리는 것보다 대체로 더 효율적이에요.
삭제 벡터를 쓰는 테이블이라면 REORG ... APPLY (PURGE)도 알아두면 좋아요. OPTIMIZE가 파일을 압축하는 것과 달리, REORG는 삭제 벡터가 “삭제됐다”고만 표시해둔 행을 실제 파일에서 물리적으로 제거해요. 삭제·수정이 잦은 테이블은 REORG로 먼저 정리한 다음 OPTIMIZE를 돌리는 조합도 실무에서 많이 써요.
정리
작은 파일이 쌓여 조회가 느려지는 문제는 결국 “쓸 때 정렬을 잘해두느냐(V-Order)“와 “주기적으로 병합·정리하느냐(OPTIMIZE·VACUUM)“의 조합으로 풀어요. 읽기 위주 워크로드라면 V-Order를 켜는 걸 검토하고, 대량 적재·변환 뒤에는 OPTIMIZE로 압축한 다음 VACUUM으로 옛 파일을 정리하세요. 코드를 직접 짤 수도 있지만, 포털의 Maintenance 메뉴나 파이프라인의 Lakehouse Maintenance 활동으로도 같은 작업을 반복 실행할 수 있어요.
어휘 주석
- Z-Order: 특정 열을 기준으로 값이 비슷한 행들을 같은 파일에 모아 저장하는 정렬 방식이에요. 그 열로 필터링하는 쿼리가 읽어야 할 파일 수를 줄여줘요.
- 델타 로그(Delta log): 델타 테이블의 각 버전에서 어떤 파일이 유효한지 기록해두는 트랜잭션 로그예요.
VACUUM은 이 로그가 더 이상 가리키지 않는 파일만 지워요. - bin compaction: 작은 파일들을 그룹으로 묶어(bin) 하나의 큰 파일로 다시 쓰는
OPTIMIZE의 기본 동작을 가리키는 표현이에요.






