Why are our Azure PostgreSQL quotas dangerously low? No alerts, no explanation, blocked DR process

Joshua Schmidlkofer 0 Reputation points
2026-07-09T23:05:29.95+00:00

On July 8, 2026, we tried to initiate a disaster recovery process and discovered we were blocked due to insufficient Azure PostgreSQL quotas. When we investigated, we found something alarming: our quota limits are drastically lower than our actual usage.

The Problem:

  1. Production servers: CPU quota is less than 50% of what we're currently using. Our production database is actively operating above its quota.
  2. Dev server: CPU usage is 600% higher than the quota limit. It's running massively over quota.
  3. No alerts whatsoever: We never received any service alerts, alarms, or notifications about quota violations or enforcement. We only discovered this when we tried to scale for DR.

What I don't understand:

  • How did these quotas get set so low in the first place?
  • Were these quotas recently lowered by Microsoft, or have they always been this way?
  • Why didn't we get alerts when we started exceeding the quota limits (especially the dev server at 6x the limit)?
  • Why is the service allowing us to run above quota without notification?
  • How do we prevent this from happening again?
  • Should Azure PostgreSQL quotas be exposed in the Datadog integration so we can actually monitor them?

What we know:

  • The quotas were clearly inadequate relative to our actual workload
  • No alerts were triggered despite active violations
  • We have no visibility into why the quotas are set at these levels
  • This is now a serious business continuity concern since it blocked our DR process

Has anyone experienced this? Am I missing something about how Azure PostgreSQL quotas work? Any advice on preventing this in the future?

Community Center | Not monitored

1 answer

Sort by: Most helpful
  1. Jerald Felix 18,600 Reputation points Volunteer Moderator
    2026-07-10T02:10:36.9833333+00:00

    Hello Joshua Schmidlkofer,

    Greetings! Thanks for raising this question in the Q&A forum.

    The root cause here is that two different things are being compared as if they were the same thing. Azure vCore quota is a provisioning limit tied to your subscription and region. It caps how many vCores you are allowed to deploy or scale up to in that region, and it is only checked at the moment you create, scale, or fail over a server. CPU usage percentage is a runtime performance metric that measures how hard the vCores you already provisioned are working. A server can run at 100% CPU utilization indefinitely without ever touching the quota, because the quota was already consumed the moment the vCores were provisioned, regardless of how busy they are afterward. That is why there were no alerts: there was no quota violation in progress, only a capacity ceiling that only becomes visible when you try to provision new or additional compute, such as during your DR failover.

    1. Check what quota actually blocked you

    Go to Azure Portal, then Subscriptions, then your subscription, then Usage + quotas, and filter for Azure Database for PostgreSQL Flexible Server (or Microsoft.DBforPostgreSQL) in the region where DR was attempted. This shows current usage against the regional vCore limit for that resource type. This is almost certainly what blocked the DR scale operation, not your production server's live CPU load.

    1. Understand why the numbers look alarming

    Comparing production CPU utilization percentage against a vCore quota number is comparing a performance metric to a provisioning ceiling, so the 50 percent and 600 percent figures describe two unrelated things. Your servers were not silently violating anything. The regional quota simply was not sized to allow you to provision the additional vCores your DR process needed, most likely in the paired or secondary region rather than your primary.

    1. Request a quota increase before your next DR test

    From the same Usage + quotas page, select the subscription and region, and submit a quota increase request for the vCore SKU family your production and dev servers use. Approval is typically fast for standard SKU families but should be requested well ahead of any DR exercise, since quota increases are not instantaneous.

    1. Set up the alerting that actually applies here

    Quota consumption itself has no built-in alert in Azure Monitor because it is not a metered runtime signal, it is a static ceiling checked at request time. What you can and should alert on is CPU percentage via Azure Monitor metric alerts on each server, which will warn you before sustained high CPU becomes a performance problem, separate from the DR quota issue entirely. You can also query the Microsoft.DBforPostgreSQL usages via the Azure Resource Manager REST API or CLI on a schedule and push the result into Datadog as a custom metric, since quota is not natively exposed as a first party Azure Monitor metric that the Datadog integration can pull.

    1. Right-size vCore allocation going forward

    Since your dev server is running at 6 times its provisioned vCore count in practice, treat that as a signal the dev tier itself is undersized for its actual workload, independent of the quota conversation. Consider moving it to a larger SKU or a different compute tier so its provisioned vCores better match real usage.

    If this answer helps you kindly accept the answer which will help others who have similar questions.

    Best Regards,

    Jerald Felix

    Was this answer helpful?


Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.