피드로 돌아가기
How I debugged a Delta Lake DESCRIBE HISTORY timeout (and what's actually causing it)
Dev.toDev.to
Database

Delta Lake DESCRIBE HISTORY OOM 해결을 위한 트랜잭션 로그 최적화

How I debugged a Delta Lake DESCRIBE HISTORY timeout (and what's actually causing it)

Abhishek Ambare2026년 5월 4일5advanced

Context

streaming data의 60초 주기 commit으로 인해 _delta_log 내 JSON 파일이 기하급수적으로 증가하는 구조적 문제 발생. DESCRIBE HISTORY 명령어가 Checkpoint를 활용하지 못하고 모든 JSON 파일을 순차적으로 파싱함에 따라 Cloud Storage I/O 병목과 Driver JVM Heap 부족으로 인한 OutOfMemoryError 유발.

Technical Solution

  • logRetentionDuration 설정을 통한 7일 단위의 JSON 커밋 파일 강제 퍼지(Purge) 처리
  • Minor Log Compaction 활성화로 다수의 순차적 JSON 파일을 단일 통합 파일로 결합하여 파일 개수 감소
  • Unity Catalog system tables로 감사 로그 쿼리를 전환하여 Raw JSON 파싱 과정을 최적화된 테이블 조회로 대체
  • Bronze 테이블의 Append-only 쓰기 후 Silver/Gold 단계에서 시간 단위 Bulk MERGE를 수행하는 Medallion Architecture 적용
  • Deletion Vectors 도입을 통한 UPDATE/MERGE 시 Parquet 파일 재작성 최소화 및 JSON 로그 내 churn 감소
  • Driver 메모리 사양을 m5.xlarge에서 r5.4xlarge로 상향하여 대규모 레코드 집계를 위한 JVM Heap 공간 확보

- 고빈도 스트리밍 파이프라인의 logRetentionDuration을 7일 이하로 설정했는지 확인 - Delta

3.0+ 환경에서 Minor Log Compaction 설정(spark.databricks.delta.deltaLog.minorCompaction.useForReads) 활성화 여부 검토 - 단순 감사 목적의 쿼리를 DESCRIBE HISTORY 대신 Unity Catalog system tables로 전환 고려 - 비즈니스 요구사항을 검토하여 스트리밍 트리거 주기를 5분 이상으로 확장 가능 여부 판단

원문 읽기