2

不久前,我使用一个处于暂停状态的测试 DAG 设置了气流的测试安装。

现在,在这个系统运行了几个星期而实际上没有做太多事情(除了一些测试运行之外)之后,我想转储数据库并意识到它是巨大的。

这是由于 dag_pickle 表,气流显然会创建一个 pickle 对象并每秒将其保存在数据库

但是,数据库中的这些 pickle 行都与 dag 无关,dag 行中的pickle_id字段为空:

mysql> select * from dag;
+------------------+-----------+-----------+-----------+----------------------------+--------------+----------------------------+----------------+-----------+---------------------------------------+---------+
| dag_id           | is_paused | is_subdag | is_active | last_scheduler_run         | last_pickled | last_expired               | scheduler_lock | pickle_id | fileloc                               | owners  |
+------------------+-----------+-----------+-----------+----------------------------+--------------+----------------------------+----------------+-----------+---------------------------------------+---------+
| test_dag         |         1 |         0 |         1 | 2017-05-10 11:13:57.987710 | NULL         | 2017-05-10 09:40:19.449429 |           NULL |      NULL | /opt/airflow/dags/test_dag.py         | airflow |
+------------------+-----------+-----------+-----------+----------------------------+--------------+----------------------------+----------------+-----------+---------------------------------------+---------+
1 row in set (0.00 sec)

检查 dag_pickle 表,我们看到每秒都会创建一行:

mysql> select max(created_dttm), count(*), now() from dag_pickle;
+----------------------------+----------+---------------------+
| max(created_dttm)          | count(*) | now()               |
+----------------------------+----------+---------------------+
| 2017-05-10 11:20:26.000000 |  1893572 | 2017-05-10 11:20:26 | 
+----------------------------+----------+---------------------+
1 row in set (13.71 sec)

mysql> select max(created_dttm), count(*), now() from dag_pickle;
+----------------------------+----------+---------------------+
| max(created_dttm)          | count(*) | now()               |
----------------------------+----------+---------------------+
| 2017-05-10 11:20:40.000000 |  1893586 | 2017-05-10 11:20:41 |
+----------------------------+----------+---------------------+
1 row in set (12.55 sec)

mysql> SELECT 1893586-1893572 as delta, TIMEDIFF('2017-05-10 11:20:41','2017-05-10 11:20:26') as time_delta;
+-------+------------+
| delta | time_delta |
+-------+------------+
|    14 | 00:00:15   |
+-------+------------+
1 row in set (0.00 sec)

(如您所见,这个表太大以至于它成为一个操作负担,它现在是 7.5 GB 大小)

我现在的问题是:

  1. 所有这些泡菜行都用于任何用途,还是我可以保存删除它们?(我假设后者,因为没有来自 dag 的引用)是否有一些清理程序可以从数据库中删除未使用的内容?

  2. 这是我的配置错误还是气流错误?我可以配置气流,以便仅在实际需要时创建这些泡菜对象吗?

  3. donot_pickle配置选项到底有什么影响,如果 donot_pickle 设置为True ,我还能从另一台机器上的工作人员运行 DAG吗?

谢谢!

4

0 回答 0