이 문서는 레이크하우스 아키텍처 섹션의 일부입니다.
왜 Deletion Vectors가 필요한가요?
Delta Lake에서 데이터를 삭제(DELETE)하거나 수정(UPDATE)할 때, 내부적으로는 어떤 일이 벌어질까요? 기존 방식에서는 변경 대상이 포함된 파일 전체를 다시 작성(rewrite) 해야 했습니다. 1GB 파일에서 단 1행만 삭제해도, 나머지 999,999행을 포함한 새 파일을 써야 했던 것입니다.💡 Deletion Vectors(Deletion Vector) 는 이러한 비효율을 해결하기 위해 도입된 기술입니다. 파일을 다시 쓰지 않고, 어떤 행이 삭제되었는지를 별도의 파일에 기록 하는 방식으로 DELETE, UPDATE, MERGE의 성능을 크게 향상시킵니다.
Copy-on-Write vs Deletion Vectors
Copy-on-Write (기존 방식)
기존 Delta Lake는 Copy-on-Write(CoW) 방식을 사용했습니다.Deletion Vectors (새 방식)
성능 비교
동작 원리 상세
Deletion Vector 파일
Deletion Vector는 비트맵(bitmap) 형태로 저장됩니다. 각 비트가 파일 내 한 행에 대응하며, 삭제된 행은 1, 유효한 행은 0으로 표시됩니다.읽기 시 동작
쿼리를 실행할 때, Delta Lake는 Parquet 파일과 함께 해당 파일의 Deletion Vector를 읽어 삭제된 행을 자동으로 필터링 합니다.UPDATE에서의 동작
UPDATE는 내부적으로 “기존 행 삭제 + 새 행 추가”로 동작합니다.설정 방법
활성화
💡 Databricks Runtime 14.0 이상에서 생성된 Delta 테이블은 기본적으로 Deletion Vectors가 활성화 되어 있습니다. 별도의 설정 없이 자동으로 적용됩니다.
비활성화
OPTIMIZE와의 관계
Deletion Vectors가 쌓이면 읽기 시 DV를 확인하는 오버헤드가 증가할 수 있습니다. OPTIMIZE 를 실행하면 DV가 적용된 파일들이 새로 작성되면서, Deletion Vectors가 물리적으로 반영(materialized) 됩니다.💡 Deletion Vectors는 쓰기 성능을 즉시 개선 하지만, DV가 많이 쌓이면 읽기 성능이 약간 저하될 수 있습니다. 정기적인 OPTIMIZE로 DV를 정리하는 것이 좋습니다. Predictive Optimization 이 활성화되어 있다면 이 작업도 자동으로 처리됩니다.
호환성 고려사항
⚠️ 외부 엔진 호환성: Databricks 외부에서 Delta 테이블을 직접 읽는 경우, 해당 리더가 Deletion Vectors를 지원하는지 확인해야 합니다. 지원하지 않으면 삭제된 행이 결과에 포함될 수 있습니다. UniForm을 통해 Iceberg로 읽는 경우에는 이 문제가 발생하지 않습니다.
DV 내부 저장 구조 — RoaringBitmap
Deletion Vectors는 내부적으로 RoaringBitmap 데이터 구조를 사용하여 삭제된 행의 위치를 매우 효율적으로 저장합니다.RoaringBitmap이란?
💡 RoaringBitmap 은 정수 집합을 메모리 효율적으로 저장하는 압축 비트맵 데이터 구조입니다. 일반 비트맵보다 훨씬 적은 공간을 사용하면서도 빠른 집합 연산(합집합, 교집합)을 지원합니다.
DV 파일의 물리적 저장
DV는 두 가지 방식으로 저장될 수 있습니다.Copy-on-Write vs Merge-on-Read 성능 특성 심층 분석
DV의 도입으로 Delta Lake는 사실상 Merge-on-Read(MoR) 방식을 채택하게 되었습니다. 두 방식의 성능 특성을 워크로드별로 비교합니다.워크로드별 성능 비교
읽기 오버헤드 정량 분석
DV가 활성화된 상태에서 읽기 시 추가되는 오버헤드입니다.💡 핵심 교훈: DV의 읽기 오버헤드는 대부분의 경우 무시할 수 있는 수준이지만, DV가 매우 크게 누적 되면 의미 있는 성능 저하가 발생합니다. 이때가 OPTIMIZE를 실행해야 하는 시점입니다.
DV + Photon 최적화
Photon 엔진은 DV를 네이티브로 지원하며, DV 기반 연산에 대해 추가적인 최적화를 제공합니다.💡 실무 팁: DV가 활성화된 테이블에서 MERGE/UPDATE를 자주 수행하는 경우, Photon 지원 클러스터(i3.xlarge 등)를 사용하면 DV 처리 성능이 크게 향상됩니다. Serverless 컴퓨트는 Photon이 기본 활성화되어 있습니다.
DV와 타임 트래블 상호작용
Delta Lake의 타임 트래블(Time Travel)은 이전 버전의 데이터를 조회하는 기능인데, DV 환경에서 몇 가지 주의할 점이 있습니다.DV 환경에서의 타임 트래블 동작
VACUUM과 DV의 상호작용
⚠️ Gotcha: OPTIMIZE를 실행하면 DV가 적용된 새 파일이 생성되고, 기존 파일은 “removed” 표시됩니다. 이후 VACUUM이 기존 파일을 삭제하면, OPTIMIZE 이전 버전으로의 타임 트래블이 불가능해집니다. 타임 트래블 보존 기간(delta.logRetentionDuration)을 신중히 설정하세요.
대규모 DELETE/UPDATE 시 DV 누적 문제와 해결
DV 누적 시나리오
지속적인 CDC(Change Data Capture) 처리나 빈번한 UPDATE가 발생하는 테이블에서는 DV가 빠르게 누적됩니다.DV 누적 정도 모니터링
OPTIMIZE 실행 전략
💡 비용 고려: OPTIMIZE는 파일을 다시 쓰는 작업이므로 컴퓨트 비용이 발생합니다. DV가 적은 상태에서 불필요하게 OPTIMIZE를 실행하면 낭비입니다. Predictive Optimization이 바로 이 “최적의 시점”을 자동으로 판단해 주는 기능입니다.