---
title: V-Order와 OPTIMIZE·VACUUM: Lakehouse 테이블 관리 기본
description: 적재를 반복할수록 작은 파일이 쌓여 조회가 느려져요. Fabric의 V-Order 압축과 OPTIMIZE·VACUUM을 UI와 Spark 명령 두 가지 방법으로 언제 어떻게 돌리는지 정리했어요.
date: 2026-10-17
  tags: [V-Order, OPTIMIZE, VACUUM, Lakehouse, 성능]
cards:
  - /cards/fabric-v-order-table-maintenance/card-01.png
  - /cards/fabric-v-order-table-maintenance/card-02.png
  - /cards/fabric-v-order-table-maintenance/card-03.png
  - /cards/fabric-v-order-table-maintenance/card-04.png
  - /cards/fabric-v-order-table-maintenance/card-05.png
  - /cards/fabric-v-order-table-maintenance/card-06.png
  - /cards/fabric-v-order-table-maintenance/card-07.png
author: Lissa
source: https://interlinear.work/notes/fabric-v-order-table-maintenance/
---

> **원문:** [Delta Table Maintenance in Microsoft Fabric](https://learn.microsoft.com/en-us/fabric/data-engineering/lakehouse-table-maintenance)
> **게시일:** 2026-03-27 · **저자:** Sneha Gunda

레이크하우스에 매일 데이터를 적재하다 보면 어느 순간부터 조회가 눈에 띄게 느려져요. 대부분 원인은 하나예요. 적재할 때마다 작은 파케이 파일이 하나씩 늘어났고, 쿼리 엔진이 그 수많은 작은 파일을 일일이 열어보느라 시간을 다 쓰는 거예요. 삭제·수정을 반복한 흔적도 파일로 그대로 남아 쌓여요. Fabric은 이 문제를 V-Order, OPTIMIZE, VACUUM 세 가지로 다뤄요.

## V-Order — 쓸 때 미리 정렬해두는 최적화

V-Order는 파케이 파일을 쓰는 시점에 적용하는 최적화예요. 행 그룹 배치, 인코딩, 압축 방식을 다시 정리해서 나중에 읽을 때 더 빨리 읽히게 만들어요.

- **가장 도움이 되는 경우**: 대시보드, 반복 조회처럼 읽기 위주 워크로드예요.
- **트레이드오프**: 쓰기 시간이 평균 15% 정도 늘어나는 대신, 압축률은 최대 50%까지 올라갈 수 있어요.
- **호환성**: 파일은 여전히 표준 파케이 규격을 지켜서, Z-Order 같은 다른 델타 기능과 함께 써도 문제없어요.
- **기본값**: 신규로 만든 Fabric 워크스페이스에서는 V-Order가 기본적으로 꺼져 있어요. 쓰기 위주 데이터 엔지니어링 워크로드의 성능을 우선하기 위한 선택이에요. 읽기 위주 워크로드라면 세션 설정이나 테이블 속성으로 직접 켜야 해요.

## OPTIMIZE — 작은 파일을 큰 파일로 병합하기

`OPTIMIZE`는 작은 파일들을 더 크고 적은 수의 파일로 다시 써서 조회 효율을 높이는 명령이에요. 대량 적재나 변환 작업 뒤에 실행하는 게 일반적이에요.

```sql
-- 기본 압축(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`이에요.

```sql
-- 기본 보존 기간(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 포털에서 바로 실행할 수 있어요.

1. 레이크하우스를 열고 **Tables** 아래에서 대상 테이블을 찾아요.
2. 테이블을 마우스 오른쪽 버튼으로 클릭(또는 점 세 개 메뉴)하고 **Maintenance**를 선택해요.
3. **Run maintenance commands** 대화상자에서 옵션을 골라요.
   - 압축을 켜면(On) 작은 파케이 파일을 큰 파일로 합쳐요.
   - 압축을 켠 상태에서 **Apply V-order** 체크박스를 추가로 켤 수 있어요.
   - `VACUUM`을 켜면(On) 보존 기간보다 오래된, 더는 참조되지 않는 파일을 지워요.
4. **Run now**로 즉시 실행해요.
5. 실행 상태는 포털 상단 알림(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 활동으로도 같은 작업을 반복 실행할 수 있어요.

---

## 어휘 주석

1. **Z-Order:** 특정 열을 기준으로 값이 비슷한 행들을 같은 파일에 모아 저장하는 정렬 방식이에요. 그 열로 필터링하는 쿼리가 읽어야 할 파일 수를 줄여줘요.
2. **델타 로그(Delta log):** 델타 테이블의 각 버전에서 어떤 파일이 유효한지 기록해두는 트랜잭션 로그예요. `VACUUM`은 이 로그가 더 이상 가리키지 않는 파일만 지워요.
3. **bin compaction:** 작은 파일들을 그룹으로 묶어(bin) 하나의 큰 파일로 다시 쓰는 `OPTIMIZE`의 기본 동작을 가리키는 표현이에요.