You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Airflow 2.3.3(GCP Composer)db clean未清理dag_runs表,是否为已知问题?

问题

在GCP Composer环境使用Airflow 2.3.3版本,执行airflow db clean命令后,发现dag_runs等元数据表中的部分条目未被清理,手动检查数据库确认这些条目仍存在。执行以下SQL语句查询到非空结果:

SELECT base.*
FROM dag_run AS base LEFT OUTER JOIN (SELECT dag_id, max(dag_run.start_date) AS max_date_per_group
FROM dag_run
WHERE external_trigger = false GROUP BY dag_id) AS latest ON base.dag_id = latest.dag_id AND base.start_date = max_date_per_group
WHERE base.start_date < '2023-01-01' AND max_date_per_group IS NULL;

请问这是已知问题吗?

解答
  • 这是Airflow 2.3.x版本airflow db clean命令的预期行为,部分场景下易被误认为清理不彻底,核心原因包括:
    1. 默认保留每个DAG的最新运行记录:该命令的逻辑是为每个DAG保留最新的一次运行实例,无论其开始时间是否早于清理阈值。你的SQL结果中可能包含部分DAG的唯一运行记录(即该DAG无后续运行),这类记录会被命令跳过。
    2. 外部触发任务的处理规则:从SQL可以看出,结果集包含external_trigger = true的dag_run。Airflow 2.3.3中,db clean默认保留外部触发任务的最新运行实例,这由airflow.cfg的clean_keep_last参数控制(默认值True),即使该实例早于阈值也不会被清理。
    3. 版本固有局限:2.3.x版本的db clean确实存在边缘场景处理不足的问题,比如已删除DAG的历史记录无法自动清理、多租户环境下权限隔离导致的清理遗漏等,这些问题在2.4及以上版本中已得到优化。

若需要彻底清理所有早于指定日期的dag_runs(包括每个DAG的最新记录),可修改命令参数执行:

airflow db clean --clean-keep-last False --before 2023-01-01

也可通过自定义SQL批量删除目标条目,但执行前必须做好数据库备份。

内容的提问来源于stack exchange,提问作者Miroslav Karpíšek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:11:16