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

如何解决Airflow无法分配数据库对象空间及调度器异常问题

Airflow调度器启动失败排查与解决

问题情况

  • Airflow页面提示:调度器似乎未运行,最后一次心跳是6小时前。DAG列表可能无法更新,新任务将不会被调度
  • 已清理服务器日志文件夹、恢复磁盘空间,但执行airflow scheduler时仍报错,错误核心是SQL Server的airflow数据库PRIMARY文件组已满,具体错误信息如下:
[2023-02-10 21:10:54,079] {cli_action_loggers.py:105} WARNING - Failed to log action with (pyodbc.ProgrammingError) ('42000', "[42000] [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]无法为数据库 'airflow' 中的对象 'dbo.log'.'PK__log__3213E83F7F1F073F' 分配空间,因为 'PRIMARY' 文件组已满。请通过删除不需要的文件、删除文件组中的对象、向文件组添加其他文件或启用现有文件的自动增长来创建磁盘空间。 (1105) (SQLExecDirectW)")
[SQL: INSERT INTO log (dttm, dag_id, task_id, event, execution_date, owner, extra) OUTPUT inserted.id VALUES (?, ?, ?, ?, ?, ?, ?)]
[parameters: (datetime.datetime(2023, 2, 10, 21, 10, 54, 51696, tzinfo=Timezone('UTC')), None, None, 'cli_scheduler', None, 'root', '{"host_name": "plappnx-1", "full_command": "[\'/usr/local/bin/airflow\', \'scheduler\']"}')]

sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42000', "[42000] [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]无法为数据库 'airflow' 中的对象 'dbo.job'.'PK__job__3213E83F7D216A15' 分配空间,因为 'PRIMARY' 文件组已满。请通过删除不需要的文件、删除文件组中的对象、向文件组添加其他文件或启用现有文件的自动增长来创建磁盘空间。 (1105) (SQLExecDirectW)")
[SQL: INSERT INTO job (dag_id, state, job_type, start_date, end_date, latest_heartbeat, executor_class, hostname, unixname) OUTPUT inserted.id VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: (None, <TaskInstanceState.RUNNING: 'running'>, 'SchedulerJob', datetime.datetime(2023, 2, 10, 21, 10, 54, 981528, tzinfo=Timezone('UTC')), None, datetime.datetime(2023, 2, 10, 21, 10, 54, 981540, tzinfo=Timezone('UTC')), 'SequentialExecutor', 'plappnx-1', 'root')]

解决步骤

1. 检查数据库空间使用情况

登录SQL Server管理工具(SSMS或sqlcmd),执行以下命令查看airflow数据库的空间占用:

USE airflow;
EXEC sp_spaceused;

重点看data部分的reserved和free字段,确认PRIMARY文件组是否真的没有剩余空间。

2. 清理Airflow的历史数据

Airflow的log和job表是主要的空间占用大户,清理旧数据:

  • 删除30天前的日志和任务记录(可根据实际需求调整天数):
DELETE FROM dbo.log WHERE dttm < DATEADD(day, -30, GETUTCDATE());
DELETE FROM dbo.job WHERE start_date < DATEADD(day, -30, GETUTCDATE());
  • 清理后如果需要回收空间,执行收缩数据库:
USE airflow;
DBCC SHRINKDATABASE (airflow);

3. 开启数据库文件自动增长

如果数据库文件的自动增长被禁用或增量设置过小,修改配置:

  • 用SQL命令调整:
ALTER DATABASE airflow
MODIFY FILE (NAME = airflow_data, FILEGROWTH = 1024MB); -- 每次自动增长1GB,根据磁盘情况调整
  • 或者在SSMS中操作:右键airflow数据库 → 属性 → 文件 → 找到PRIMARY数据文件,点击编辑按钮开启自动增长并设置合理增量。

4. 给PRIMARY文件组添加新数据文件

如果当前磁盘还有剩余空间,可添加新的数据文件扩容:

ALTER DATABASE airflow
ADD FILE (
    NAME = airflow_data2,
    FILENAME = 'D:\SQLData\airflow_data2.ndf', -- 替换为实际可用的磁盘路径
    SIZE = 1024MB,
    FILEGROWTH = 1024MB
) TO FILEGROUP PRIMARY;

5. 重启调度器

完成以上操作后,重新启动Airflow调度器:

airflow scheduler

再检查Airflow页面的调度器状态是否恢复正常。


内容的提问来源于stack exchange,提问作者obautista

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 10:50:25