Skip to main content
Back to the Azure Footguns Database
ReliabilityGovernanceHighOccasionalAZF-0058

Regional vCPU quota fills invisibly until a deploy, scale-out, or DR failover fails with QuotaExceeded

vCPU quotas are per subscription, per region, per VM family — and nothing warns you as they fill. The first symptom is a QuotaExceeded error on the day a deployment, scale-out, or failover actually mattered.

Footgun ID
AZF-0058 (Azure Footgun No. 58)
Azure service
Azure Compute quotas
Resource type
Microsoft.Compute/locations/usages
Updated
July 9, 2026

What it is

A subscription whose regional vCPU quota is nearly consumed. Azure caps how many vCPUs each subscription can run per region and per VM family, and running close to a cap costs nothing and breaks nothing — until the next allocation. Then the deployment, the autoscale event, or the disaster-recovery failover fails with QuotaExceeded, and the fix is a quota increase request you now have to wait on mid-incident.

Impact (reliability)
blocked deployments, failed autoscale events, and DR failovers that cannot allocate VMs — with hours-to-days of lead time to raise the limit
Basis: Azure behavior (authored assessment). Figures are estimates, not measurements.

Why it happens

Quota consumption is a byproduct of normal growth, not a decision anyone makes. AKS node pools scale up, a VM scale set adds instances, a new environment lands in the same subscription and region — each allocation nibbles at a limit almost nobody tracks. Azure enforces both a per-family cap and a regional total, so you can hit a wall on Standard DSv5 Family vCPUs while the regional number still looks comfortable.

There is no built-in alert as usage climbs. The Quotas page in the portal will show you the numbers if you go looking, per subscription and per region, but nothing pushes a warning at 80%. The failure mode is asymmetric: months of silence, then a hard stop at the exact moment you needed capacity — a production scale-out under load, or a DR failover into a paired region where the quota was never provisioned to absorb the primary region's workload. Increase requests are free, but approval can take hours, and large ones can require capacity review.

What it costs / blast radius

There is no direct cost — quota headroom is free, which is exactly why nobody budgets attention for it. The blast radius is operational: a release blocked at deploy time, an autoscale group pinned below the load it was sized for, or the worst case — a DR plan that fails its real test because the target region's subscription could never have allocated the failed-over VMs in the first place. A failover you cannot execute is a recovery plan you don't have. (Azure behavior; authored assessment.)

See it

Find them: regional vCPU quotas above 75% across every subscription
QuotaResources
| where type =~ 'microsoft.compute/locations/usages'
| mv-expand json = properties.value
| extend currentUsage = toint(json.currentValue),
         quotaLimit = toint(json['limit']),
         quotaName = tostring(json['name'].localizedValue)
| where quotaLimit > 0 and currentUsage > 0
| extend usagePercent = round(100.0 * currentUsage / quotaLimit, 1)
| where usagePercent >= 75
| project subscriptionId, location, quotaName,
          currentUsage, quotaLimit, usagePercent
| order by usagePercent desc
Fix: verify with the CLI, then request the increase before you need it
# Per-region view of usage vs limit for one subscription
az vm list-usage --location eastus -o table

# Raise the limit ahead of demand (uses the Microsoft.Quota provider;
# requires the 'quota' CLI extension)
az quota update \
  --resource-name standardDSv5Family \
  --scope /subscriptions/<sub-id>/providers/Microsoft.Compute/locations/eastus \
  --limit-object value=200 --resource-type dedicated
# Large increases may need a support request and capacity review --
# which is why this belongs before the incident, not during it.

How StratoLens helps

StratoLens monitors vCPU quota utilization per region across every subscription and flags quotas as they climb toward their limits, so the increase request happens on a calm Tuesday instead of mid-failover. It runs continuously inside your own tenant — no one has to remember to open the Quotas page.

Start Your 28-Day Free Trial

Every feature unlocked. Deploys to your Azure tenant. No data leaves your tenant.

Available now on the Azure Marketplace.

Not ready to install anything? Browse the Azure Footguns Database: 55+ documented ways Azure quietly costs money or creates risk.

Request a demo

StratoLens catches the cost waste, access risk, and config drift across your whole Azure estate, from inside your own tenant, so your data never leaves it.