Dag 파싱은 Airflow 의 dag processor(2.x 는 scheduler 내부에서 진행된다)가 주기적으로 Dag 폴더의 모든 .py 파일을 import 해서 Dag 객체를 만들고, 직렬화해서 Meta DB(serialized_dag 테이블)에 저장하는 과정이다.
기본적으로는 아래와 같이 셋팅이 되어 있다.
즉, Dag 파일은 한번 실행되는게 아니라 수십 초마다 반복 import 된다고 보면 된다.
그래서 파싱이 느리면 아래와 같은 문제들이 생긴다.
먼저 공식문서에 Best Practice를 살펴보자.
직감 대신 아래 메트릭으로 부터 확인이 가능하다.
dag_processing.total_parse_time: 한 사이클 전체 시간dag_processing.last_duration.<filename>: 파일별 마지막 파싱시간이며, 무거운 파일 확인이 가능하다.dag_processing.last_runtime.<filename>: 파일별 last run 경과dag_processing.processes: 활성 child process 수dag_processing.processor_timeouts: timeout 카운트(cycle 평균 왜곡 원인)Airflow 3.x 에서는 dag_processor 섹션을 확인해본다.
airflow config get-value dag_processor parsing_processes
airflow config get-value dag_processor min_file_process_interval
airflow config get-value dag_processor file_parsing_sort_mode
# top-level Variable.get / Connection.get
rg "^(Variable\.get|Connection\.get)" */dags/
# top-level DB 클라이언트 인스턴스화
rg "^(PostgresClient|KISClient)\(" */dags/
# 동적 Dag 생성
rg "for .+ in .+:" */dags/ | rg "DAG\("
Reference