Skip to content

Lesson 5 of 8 · 11 min

Sizing a Capacity With Evidence

“Which SKU do we need?” is usually asked as if it had one correct answer. It does not. A good sizing answer is a range, the assumptions behind it, and the point at which you would change your mind.

This lesson covers two situations: sizing an existing capacity that is being re-planned, and sizing for a workload that has not been built yet.

The envelope

Whatever the workload, the decision comes down to one sum:

Required capacity envelope =
  existing smoothed baseline
  + incremental demand from new or growing workloads
  + operating headroom

Each term has a different source of evidence.

  • Existing baseline comes from the Capacity Metrics app, after the optimizations in lesson four. Sizing on unoptimized demand locks waste into the budget.
  • Incremental demand comes from an estimate first, then a pilot.
  • Headroom is a policy decision. It is the share of the capacity you keep free so ordinary peaks do not become incidents.

Headroom is a policy, not a number

There is no universal headroom figure. Choose it based on how much an incident costs you.

A capacity that serves executive reporting during business hours needs more headroom than a development capacity where a delayed job is an inconvenience. A capacity with surge protection and a tested scale-up runbook can run closer to its limit than one with neither. Write the chosen headroom down with the reason, because the next person to review the capacity will ask.

Estimating before a workload exists

For a new data platform, the Fabric SKU Estimator (preview) is a reasonable first hypothesis. It asks for compressed data size, daily batch cycles, table counts, and the workloads you plan to use, then recommends a viable SKU with a breakdown.

Treat that output as a starting point, not a commitment. It cannot know your query patterns, your refresh frequency, or how many people will open a report at 9:00 AM on Monday.

The most reliable evidence is a pilot on a trial or a small pay-as-you-go capacity, using representative data and representative schedules. Run it for at least a full business cycle, including the heaviest day if you can, then read the result in the Capacity Metrics app.

Engineering workloads are system-shaped

Spark jobs, pipelines, warehouse loads, and refreshes are mostly driven by data volume, runtime, and schedule. They are planned and repeatable, so a representative run is good evidence. Size them from:

  • CU-seconds per run, measured in the pilot
  • Runs per day, from the schedule you actually need
  • The processing window and how much of it overlaps with interactive use

AI workloads are behavior-shaped

Data agents and Copilot are driven by people: how many use them, how often, how long their questions are, and how long the answers are. Adoption can change demand far faster than any pipeline schedule.

A Fabric Data Agent question creates two kinds of consumption:

  1. AI processing, reported as the AI Query operation, priced by tokens. Microsoft documents these rates:
ComponentConsumption
Uncached input100 CU-seconds per 1,000 tokens
Cached input10 CU-seconds per 1,000 tokens
Output400 CU-seconds per 1,000 tokens
  1. Generated queries against the warehouse, semantic model, or KQL database, billed to that engine as normal.

Estimate both, separately. Build three request classes (simple, standard, complex) with token counts for each, then multiply by users, questions per user, and working days. In a pilot, filter the Capacity Metrics app to the AI Query operation to measure the first number, and to the source items to measure the second. Capture the 90th percentile, not just the average, because long conversations grow the prompt.

If AI usage spreads across many workspaces, you can designate a Fabric Copilot capacity so AI usage is billed and monitored in one place. Generated queries are still charged to their source engines.

An illustrative envelope

The numbers below are fictional. They show how to present a range.

TermExpected caseHigh-adoption case
Weekday smoothed baseline, after optimization36 CUs36 CUs
New lakehouse and refresh workload8 CUs10 CUs
Data agent AI processing and generated queries4 CUs10 CUs
Subtotal48 CUs56 CUs
Headroom policy25%25%
Envelope (subtotal ÷ 0.75)64 CUsabout 75 CUs

The expected case fits an F64 exactly, with no margin for error. The high-adoption case does not. F SKUs come in fixed steps (F2, F4, F8, F16, F32, F64, F128, and up), so the next step is F128.

That does not mean “buy F128.” It means the decision depends on the levers in the next two lessons. Options include moving Spark to on-demand billing, isolating the agent workload on its own capacity, phasing the agent rollout, or starting on F64 with a tested scale-up plan and a trigger condition. The point of the envelope is to make that conversation explicit.

Do not forget licensing

If the capacity serves many Power BI viewers with free licenses, anything below F64 requires each of them to have a Pro or Premium Per User license. Include that cost in the comparison before recommending a smaller SKU.

Exercise: build your envelope

Using your baseline and the fixes from lesson four, fill in the envelope for your capacity or a planned one.

TermExpectedHighEvidence source
Smoothed baselineCapacity Metrics app, week of:
New workload 1Estimator, pilot, or calculation
New workload 2
AI processingToken model or pilot
AI generated queriesPilot
Headroom policy and reason
Envelope in CUs
Smallest SKU that fits

Then write the trigger that would change the decision, such as “if weekday background exceeds 70% for two consecutive weeks, scale to the next SKU or isolate the largest workload.”

Carry this forward

An envelope tells you how much compute you need. It does not tell you how to protect critical work when demand temporarily exceeds it. That is the subject of the next lesson.

Microsoft references