What You’ll Master Here
Four gates in series. A task passes all four or it waits. Widening a gate that was not the narrow one changes nothing.
Sixty tasks are ready. How many actually run? The answer is not your worker count — it is the smallest of four separate limits, and most teams tune the wrong one for weeks.
Set the controls below and watch which bar shortens first. That bar is the binding limit, and it is the only one worth changing.
Four gates in series. A task passes all four or it waits. Widening a gate that was not the narrow one changes nothing.
“We increased parallelism and nothing changed” is one of the most common Airflow reports, and it is always the same cause: parallelism was not the binding limit. Every limit applies simultaneously and the smallest wins, so raising a non-binding one has exactly zero effect.
- parallelism
- The maximum tasks running across the entire installation.
- max_active_tasks_per_dag
- Per-DAG cap, default 16. Formerly dag_concurrency. Stops one DAG monopolising the fleet.
- max_active_runs
- How many runs of one DAG may be active at once. The catchup and backfill guardrail from Chapter 12.
- Pool
- A named limit shared across DAGs, sized to a downstream system rather than to Airflow.
Raising limits one at a time and hoping. You change settings for a week with no effect, because only one limit binds and you have not identified it. Find the binding limit first; everything else is noise.
Identify the binding limit before changing anything. The others are irrelevant until it moves.
Remember max_active_tasks_per_dag defaults to 16 — it is often the surprise constraint on a wide DAG.
Size pools to the downstream system, never to Airflow’s capacity.
Four gates in series. This one sentence explains almost every Airflow throughput question anyone has ever asked.
Find the binding limit, change that, and ignore the rest until it moves.
