Воздушный поток большой стол
Я установил тестовую установку воздушного потока некоторое время назад с одним тестовым DAG, который находится в состоянии паузы.
Теперь, после того, как эта система работала в течение нескольких недель без особых усилий (помимо некоторых тестовых прогонов), я хотел сбросить базу данных и понял, что она огромна.
Это происходит из-за таблицы dag_pickle, в которой воздушный поток создает объект pickle и сохраняет его в базе данных каждую секунду.
Однако ни одна из этих строк рассола в базе данных не связана с dag, поле pickle_id в строке dag пусто:
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 ГБ)
Мои вопросы сейчас:
Все ли эти строки засолки используются для чего-либо или я могу их безопасно удалить? (Я полагаю, что последнее, потому что нет ссылки от dag) Есть ли какая-нибудь процедура очистки для удаления неиспользуемых вещей из базы данных?
Это ошибка в моей конфигурации или в потоке воздуха? Могу ли я настроить воздушный поток таким образом, чтобы эти протравленные объекты создавались только тогда, когда они действительно необходимы?
Какой эффект имеет опция конфигурации donot_pickle, могу ли я по-прежнему запускать группу DAG с работника на другом компьютере с CeleryExecutor, если для donot_pickle установлено значение True?
Спасибо!