Task·Asset 상태 저장소 정리

Task·Asset 상태 저장소 정리 (Task and Asset State Store Cleanup)

이 페이지는 버전 3.3에 추가된 Task·Asset 상태 저장소 정리(cleanup, 일명 가비지 컬렉션)를 다뤄요. Airflow는 자동으로 정리하지 않으므로 사용자가 CLI(airflow state-store clean)로 명시적으로 트리거해야 해요. 무엇이 정리되는지, 실행 방법, 반복 유지보수 워크플로에 통합하는 방법을 설명해요.

출처: 문서

본문

버전 3.3에 추가됨.

Airflow는 일정에 따라 task state store 행을 자동으로 제거하지 않아요. 정리(일명 "가비지 컬렉션")는 사용자(당신)의 책임이며 CLI를 통해 명시적으로 트리거해야 해요. 이 페이지는 무엇이 정리되는지, 어떻게 실행하는지, 반복 유지보수 워크플로에 어떻게 통합하는지 설명해요.

무엇이 정리되나요

정리 명령은 MetastoreBackendtask state store 행에만 작동해요. Asset store 행은 이 명령으로 절대 건드리지 않아요. Asset store 행은 asset이 비활성화될 때 고아 정리(orphan sweep)에 의해서만 제거돼요 (Task and Asset State Store Configuration 참고).

task state store 행은 그 expires_at 타임스탬프가 과거일 때 삭제 자격이 생겨요. expires_at은 쓰기 시점에 worker에서 계산돼요:

  • 명시적 retention=timedelta(...)로 쓰여진 키는 쓰기 시점부터 그 기간 후에 만료돼요.
  • retention=None(기본값)으로 쓰여진 키는 [state_store] default_retention_days에 기반한 만료를 가져요. 그 값이 > 0이면 키는 쓰기 후 그 일수만큼 지나서 만료돼요.
  • retention=NEVER_EXPIRE로 쓰여진 키는 expires_at = NULL과 영구 표시 플래그를 가져요. 이 키는 설정과 무관하게 이 명령으로 절대 삭제되지 않아요.

[state_store] default_retention_days = 0이면 명시적 보존 기간 없이 쓰여진 키는 expires_at = NULL(만료 없음)이며, 이것도 건너뛰어져요. null이 아니고 과거인 expires_at을 가진 키만 제거돼요.

Note

커스텀 백엔드([state_store] backend가 기본값 외의 것으로 설정된)는 명시적으로 건너뛰어져요. 정리 명령은 메시지를 출력하고 아무것도 삭제하지 않고 깨끗이 종료해요. 커스텀 백엔드에 자체 보존 로직이 필요하면 BaseStoreBackend.cleanup()에 구현하고 자신의 유지보수 프로세스에서 호출해요.

정리 실행하기

명령은 다음과 같아요:

airflow state-store clean

이 명령은 airflow.cfg 파일에서 [state_store] default_retention_days[state_store] state_cleanup_batch_size를 읽은 다음, 자격이 있는 모든 행을 삭제해요.

드라이 런 (Dry run)

아무것도 제거하지 않고 무엇이 삭제될지 미리 보려면 --dry-run을 사용해요:

airflow state-store clean --dry-run

출력은 dag, run, task, map index, key로 그룹화된 삭제될 모든 행을 나열해요.

배치 (Batching)

기본적으로(state_cleanup_batch_size = 0) 자격이 있는 모든 행이 단일 문으로 삭제돼요. 큰 task_state_store 테이블이 있는 배포에서는 트랜잭션당 잠금 시간을 줄이기 위해 배치 크기를 설정해요:

# airflow.cfg
[state_store]
state_cleanup_batch_size = 10000

그러면 명령은 자격이 있는 행이 남지 않을 때까지 10,000개 배치로 행을 삭제하며 각 배치 후 커밋해요.

정리를 얼마나 자주 실행할지는 쓰기 볼륨과 default_retention_days 값에 따라 달라져요. 대부분의 환경에서는 주간 정리로 충분할 수 있어요. 모든 작업 실행에 task state store 항목을 쓰는 고처리량 파이프라인의 경우, task_state_store 테이블을 작게 유지하려면 정리를 더 자주 실행하는 것을 고려해 보세요.

더 알아보기 (Learn more)