Microsoft Fabric makes it wonderfully easy to put many analytics workloads on one platform. Power BI, data engineering, warehousing, data science, real-time analytics, Copilot, and other experiences can all share the same Fabric capacity. That is a big advantage, but it also creates an architectural question that does not get much attention until something goes wrong: what should you actually do when a capacity starts running out of room? The answer is not always “buy a bigger capacity.” Sometimes you should optimize, sometimes scale up, sometimes scale out, and sometimes isolate the workload causing the problem.
First, understand what “running out” means
A Fabric capacity is a pool of compute measured in Capacity Units, or CUs. An F64 provides 64 CUs, an F128 provides 128 CUs, and multiple workspaces and workloads can consume those resources at the same time. Fabric can temporarily let operations use more compute through bursting, then spread that consumption into future time windows through smoothing. I describe smoothing as “buy now, pay later,” except the payment is made with future capacity instead of a credit card. That is why utilization can briefly exceed 100 percent without everything immediately falling apart. If accumulated usage keeps growing, however, Fabric begins throttling work by delaying and eventually rejecting operations.
A short spike and a sustained capacity problem are therefore not the same thing. Fabric is designed to absorb temporary bursts, so a spike in the Capacity Metrics app does not automatically mean you chose the wrong SKU. What matters is whether smoothed usage repeatedly accumulates until users are delayed, operations are rejected, or important workloads are affected by less important ones. I would install the Capacity Metrics app from day one rather than waiting until somebody says, “Fabric is slow.” It lets you trace CU consumption back to workspaces, items, operations, and users, which is where the real decision-making begins.
Set alerts before users tell you there is a problem
Don’t wait for users to tell you that a capacity is overloaded. Set up notifications for capacity usage exceedance so admins or specified contacts are notified when usage exceeds the configured threshold, and use the Capacity troubleshooting guide to investigate and respond when those notifications occur. For more sophisticated or near-real-time monitoring, Capacity Overview Events in Real-Time Hub can be used with Activator to trigger customized alerts when capacity-health measures cross thresholds. The Fabric Capacity Metrics app then helps you investigate utilization, throttling, and which workloads are consuming the capacity.
Choice 1: Optimize
My first question when a capacity is under pressure is simple: are we using the CUs well? Look for inefficient semantic model refreshes, expensive SQL queries, oversized Spark jobs, pipelines running more often than necessary, or development workloads that somehow found their way onto production capacity (they are very social that way). If one item consumes an unreasonable share of the capacity, scaling up may just give that item a larger buffet. Use Capacity Metrics to identify expensive operations and the Fabric Chargeback app if you want workspace owners to understand how much shared capacity they consume. Optimization is usually the cheapest response, but once workloads are reasonably designed and legitimate demand keeps growing, it is time to stop optimizing around the real problem.
Choice 2: Scale up
If the workloads are healthy and the entire capacity needs more compute, scaling up is usually the cleanest answer. One of the nice things about Fabric is how quickly you can change capacity size: Microsoft says that scaling a capacity smaller than F64 up to a larger capacity happens almost immediately, although the associated capacity license update can take up to a day in some cases. You can also scale the capacity back down through Azure when the additional CUs are no longer needed, making resizing useful for both permanent growth and temporary periods of higher demand. Microsoft provides capacity planning guidance and the Fabric SKU Estimator to establish a starting point, but I would still test representative workloads and realistic concurrency rather than treating an estimate as a promise carved into stone. Scaling up works especially well when workloads have similar importance and usage patterns, and the ability to resize quickly means you do not necessarily have to size a capacity for your worst-case demand from day one. But scaling up does not solve the noisy-neighbor problem; if one class of workload should not be allowed to hurt another, you have an isolation problem rather than a sizing problem.
Choice 3: Scale out
Scaling out means adding capacities and distributing workspaces across them. This can cost more and create underused capacity, so I would not give every department its own F SKU just because the org chart has boxes. Instead, group workloads according to criticality and behavior. Production reporting, self-service analytics, development and testing, and large periodic engineering workloads often have very different performance expectations and risk profiles. Separating them lets you apply different capacity sizes, settings, and governance while reducing noisy-neighbor risk. The tradeoff is straightforward: consolidation usually improves utilization and cost efficiency, while isolation improves predictability and protection.
This is where workspace design and capacity design need to work together. A workspace is mainly a boundary for content, ownership, security, and deployment, while a capacity is the compute boundary underneath it. Those boundaries do not need to match one-for-one; dozens of workspaces might share one capacity while a handful of mission-critical workspaces sit on another. Microsoft discusses this consolidation-versus-isolation decision in its capacity planning guidance for decentralized analytics. The key is to isolate because the business impact justifies it, not because more boxes make an architecture diagram look impressive.
Choice 4: Isolate
I like three practical isolation patterns: tryout, timeout, and rescue capacities. A tryout capacity is a small F SKU where new workspaces or items can prove themselves before reaching production; run them there, measure their CU consumption, optimize them if necessary, and promote them only after you understand how they behave. A timeout capacity works in the opposite direction: if a workspace is hurting a shared capacity, move it out while the owner fixes the problem. It is the Fabric equivalent of telling a misbehaving workload to go sit in the corner for a while. Both patterns give you somewhere to deal with risky workloads without making everyone else pay the price.
A rescue capacity protects the workloads you cannot afford to have disrupted. Keep an F SKU paused, resume it during an incident, and temporarily reassign priority workspaces while you deal with whatever is hurting the main capacity. Pausing must be used carefully because Fabric reconciles smoothed usage when a capacity is paused, and OneLake storage continues to be billed. A rescue capacity is therefore not free insurance. But when an hour of disruption would cost far more than maintaining an emergency option, it can be a useful operational tool.
Add guardrails, but don’t confuse them with architecture
Fabric also offers tools that can protect shared compute before trouble spreads. Surge protection can limit excessive background or workspace consumption, while capacity overage (in preview) provides another way to handle excess usage rather than relying only on throttling. Autoscale Billing for Spark can isolate especially bursty Spark compute, and Fabric Copilot capacity can direct Copilot and data agent consumption for selected users to a designated capacity. These are useful capabilities, but I would not enable every option simply because it exists. Each should answer a specific question: what workload am I protecting, what am I isolating it from, and what am I willing to pay to keep it running?
What I would actually deploy
For a typical enterprise, I would start with a general-purpose production capacity sized for normal demand rather than the worst five minutes of the year. I would strongly consider a separate capacity for broad self-service analytics and another smaller capacity for development, testing, and tryout workloads. If critical reporting cannot tolerate disruption, I would consider a paused rescue capacity as well. Large bursty Spark workloads and widespread Copilot usage deserve separate evaluation because Fabric provides specialized ways to handle their consumption. Most importantly, I would review Capacity Metrics regularly, configure alerts so the right people know when a capacity is approaching trouble, and use chargeback or showback to create accountability, and expect the topology to evolve as Fabric adoption grows.
Here is the bottom line: when a Fabric capacity starts running out, “scale up” should not be the automatic response. First determine whether you have a waste problem, a growth problem, or an isolation problem. Optimize waste. Scale up when healthy workloads collectively need more compute. Scale out when different workload classes need separate resource boundaries. Isolate new, problematic, or mission-critical workloads when the business impact warrants it. Then add monitoring and alerts so you find capacity pressure before your users do. Fabric gives you many levers; the architecture skill is knowing which one to pull. The goal is not to guarantee that Fabric never experiences a spike. The goal is to make sure one spike does not become everybody’s problem.
More info:
Microsoft
- Plan Your Microsoft Fabric Capacity: Strategic Guide Overview
- Microsoft Fabric Capacity Planning Guide — Part 1: Plan Your First Deployment
- Microsoft Fabric Capacity Planning Guide — Part 2: Scale for Decentralized Analytics
- Microsoft Fabric Capacity Planning Guide — Part 3: Scale for Centralized Analytics
- Microsoft Fabric Capacity Planning Guide — Part 4: Manage Growth and Governance
- Choose a Microsoft Fabric Deployment Pattern — Azure Architecture Center
- Overload to Optimal: Tuning Microsoft Fabric Capacity
Other blogs
- How to Choose the Best Microsoft Fabric Capacity?
- Microsoft Fabric Workspace Topology Patterns
- Bursting and Smoothing – Yin and Yang of the Fabric Capacity!
- Fabric Capacities Optimization — Everything You Need to Know
- Pausing a Fabric Capacity – What Does It Actually Mean?
- Microsoft Fabric Pricing Model – Everything You Need to Know!
- How to Choose the Right Microsoft Fabric SKU: A Practical Guide for Executives
- Capacity Reservation in Microsoft Fabric: Configuration Guide
The post When Your Microsoft Fabric Capacity Runs Out: Optimize, Scale Up, Scale Out, or Isolate? first appeared on James Serra's Blog.