fix(dq): устранено переполнение памяти проверок
- Зачем: - параллельный DQ выгружал деловые ключи в Python и исчерпывал 640 МиБ планировщика. - Что: - четыре сверки агрегируют дневные итоги и ограниченную диагностику в ClickHouse. - коробка планировщика поднята до 1,5 ГиБ, локальные пределы задач удалены. - измерения и граница между SQL и Python записаны в документации. - Проверка: - make lint, make config-test, make smoke, make check-clickhouse, make check-services. - полный etl_pipeline, красный и восстановительный прогоны dq_check.
This commit is contained in:
1 parent
26b2e5fea1
commit
54686651df
10 files changed
+295
-190
No files matched your search
@@ -19,16 +19,23 @@
|
||||
|
||||
Нодам ClickHouse — по 4 ГиБ вместо гигабайта. Дальше в этом тексте предел
|
||||
памяти контейнера (`mem_limit`) называется коробкой: сервер живёт внутри неё и
|
||||
о самой машине ничего не знает. Остальные `mem_limit` не меняются.
|
||||
о самой машине ничего не знает. На 1 августа остальные `mem_limit` не менялись.
|
||||
|
||||
Числа, выставленные ради прежнего бюджета, остаются в силе, но лишаются
|
||||
статуса решения: `KAFKA_HEAP_OPTS`, `shared_buffers`, `max_connections`,
|
||||
`AIRFLOW__CORE__PARALLELISM` и девять неизменённых `mem_limit`. Основания,
|
||||
`AIRFLOW__CORE__PARALLELISM` и восемь оставшихся `mem_limit`. Основания,
|
||||
кроме отменённого, у них нет. Кто в них упрётся — меняет по первому
|
||||
свидетельству и этот ADR не пересматривает. Срок хранения метрик Prometheus
|
||||
сюда не входит: неделя истории — осознанный учебный выбор, и цена у него
|
||||
дисковая.
|
||||
|
||||
27 августа таким пределом впервые стала коробка `airflow-scheduler`:
|
||||
LocalExecutor исполняет в ней до четырех процессов задач одновременно, а
|
||||
640 МиБ этого не вместили. Коробка поднята до 1,5 ГиБ. Ресурсные ограничения
|
||||
из отдельных дагов удалены. Общий предел параллелизма уже задает Airflow.
|
||||
`max_active_runs=1` остается там, где два запуска делили бы один донор и могли
|
||||
повредить публикацию.
|
||||
|
||||
Ресурсный довод ADR 0001 отозван.
|
||||
|
||||
## Почему
|
||||
@@ -94,8 +101,8 @@ ClickHouse сам понижает каждый до 512 МиБ, а на сте
|
||||
заранее, и в покое стенд занимает около 3,2 ГБ. Восемь гигабайт нужны не сумме
|
||||
пределов, а работе с запасом.
|
||||
|
||||
Остальные девять лимитов не меняются, потому что ни один из них ни разу не
|
||||
сработал. Снять их скопом — то же изменение без свидетельств, каким они были
|
||||
На 1 августа остальные девять лимитов не менялись, потому что ни один из них
|
||||
не сработал. Снять их скопом — то же изменение без свидетельств, каким они были
|
||||
выставлены, только в обратную сторону. Лечение здесь не в том, чтобы стереть
|
||||
числа, а в том, чтобы лишить их статуса закона: число без основания меняют,
|
||||
когда оно мешает, и не защищают как принятое решение.
|
||||
@@ -151,3 +158,13 @@ to 2.00 GiB because the system has limited RAM` и такие же строки
|
||||
Значение `max_server_memory_usage_to_ram_ratio` = 0,9 и то, что в cgroup предел
|
||||
считается от коробки, а не от машины, сверены по документации ClickHouse через
|
||||
MCP Context7.
|
||||
|
||||
`airflow-scheduler` проверен отдельно 27 августа 2026 года. На свежем
|
||||
контейнере две попытки запустить четыре DQ-сверки параллельно в коробке
|
||||
640 МиБ дошли ровно до `memory.max` и дали `oom_kill=1`: сначала при выгрузке
|
||||
57 567 ключей сессий в Python, затем и после переноса дневной агрегации в
|
||||
ClickHouse. В коробке 1 ГиБ сам `dq_check` прошел, но снова коснулся верхней
|
||||
границы (`memory.events.max=57`). Полный `etl_pipeline` без локальных
|
||||
ограничений задач в коробке 1,5 ГиБ завершился успешно: пик - 1 013 760 000
|
||||
байт, `memory.events.max=0`, `oom_kill=0`. Docker не резервирует разницу между
|
||||
пиком и пределом, поэтому этот запас не увеличивает расход памяти в покое.
|
||||
Reference in new issue
Block a user