Forum Discussion

iShaymus's avatar
iShaymus
New Member
4 months ago
Solved

Minimising Pipeline Overhead

Hi team,

 

I'm seeing what I would consider significant pipeline overhead where a pipeline continues to run for 10-30% of the time it's child tasks took to complete.  I am wondering if this is something I can address with config or if it's a "just the way it is" scenario.

 

- The bottom red pipeline runs another pipeline and a dbt job

- Bottom orange pipeline runs the two other pipelines

- Blue and Green pipelines run their respective Copy Jobs

In all cases the parent pipeline's run time exceeds the sum run time of it's child components by a significant amount, nearly 10 minutes in some cases where the pipeline is just sitting there, doing nothing (or at least 'visibly' doing nothing).

  • Hi iShaymus ,

    The overhead you're seeing is expected behavior with nested pipelines. Each Execute Pipeline activity introduces scheduling latency typically 1–3 minutes per level due to activity state polling, metadata persistence, and checkpoint writes between parent and child runs. This cost is partially fixed: it doesn't scale with your data volume, but it does compound with nesting depth.

    In your case, with 3 levels of nesting (orange - red - blue/green), you're accumulating that latency at each hop. That's likely where most of your 10-minute gap is coming from.

    A few approaches that can help reduce it :

    • Reduce nesting depth
      Flatten your orchestration where possible. Instead of parent - child - grandchild, bring Copy Jobs and dbt execution into a single pipeline level using ForEach (parallel = true). Fewer hops = less overhead.
    • Group related activities into parameterized child pipelines
      Instead of many nearly identical pipelines, use a small number of parameterized ones called from one orchestrator. Reduces both nesting and maintenance overhead.
    • Use metadata-driven orchestration
      A config table can replace multiple similar pipelines. We've used this pattern to onboard dozens of sources while keeping the orchestration layer flat and fast.
    • Monitor before optimizing
      Check the Monitoring Hub first sometimes the real bottleneck is Spark startup time, source latency, or SQL workload rather than pipeline scheduling itself.

     

    Useful reference : https://learn.microsoft.com/en-us/fabric/data-factory/pipeline-runs 

    Out of curiosity are you mainly trying to reduce execution time, capacity consumption, or operational complexity? The answer could lead to different recommendations.

3 Replies

  • Hi iShaymus ,

    The overhead you're seeing is expected behavior with nested pipelines. Each Execute Pipeline activity introduces scheduling latency typically 1–3 minutes per level due to activity state polling, metadata persistence, and checkpoint writes between parent and child runs. This cost is partially fixed: it doesn't scale with your data volume, but it does compound with nesting depth.

    In your case, with 3 levels of nesting (orange - red - blue/green), you're accumulating that latency at each hop. That's likely where most of your 10-minute gap is coming from.

    A few approaches that can help reduce it :

    • Reduce nesting depth
      Flatten your orchestration where possible. Instead of parent - child - grandchild, bring Copy Jobs and dbt execution into a single pipeline level using ForEach (parallel = true). Fewer hops = less overhead.
    • Group related activities into parameterized child pipelines
      Instead of many nearly identical pipelines, use a small number of parameterized ones called from one orchestrator. Reduces both nesting and maintenance overhead.
    • Use metadata-driven orchestration
      A config table can replace multiple similar pipelines. We've used this pattern to onboard dozens of sources while keeping the orchestration layer flat and fast.
    • Monitor before optimizing
      Check the Monitoring Hub first sometimes the real bottleneck is Spark startup time, source latency, or SQL workload rather than pipeline scheduling itself.

     

    Useful reference : https://learn.microsoft.com/en-us/fabric/data-factory/pipeline-runs 

    Out of curiosity are you mainly trying to reduce execution time, capacity consumption, or operational complexity? The answer could lead to different recommendations.

    • iShaymus's avatar
      iShaymus
      New Member

      Thanks for the resposne.  I'm not looking to resolve it with any specific lens, I simply know how long they approximately take to run if I run the copy jobs individually vs what I was seeing with a full pipeline run.  I was seeking to understand the reason for the additional overhead and where possible, improve it.

  • v-prasare's avatar
    v-prasare
    Icon for Community Support rankCommunity Support

    Hi iShaymus ,

    We would like to confirm if our community members answer resolves your query or if you need further help. If you still have any questions or need more support, please feel free to let us know. We are happy to help you.


    Tamanchu  ,Thanks for your prompt response

     

     

    Thank you for your patience and look forward to hearing from you.
    Best Regards,
    Prashanth Are
    MS Fabric community support