SQL reserved capacity: the basics
What is Azure actually offering when it tells you to reserve SQL capacity?
Azure SQL Database and SQL Managed Instance on the vCore model are billed by default at the pay-as-you-go rate: you pay for the compute by the hour, with no commitment. That flexibility is convenient for a workload you are still sizing, but it is the most expensive way to run a database that has settled into a steady, predictable size. Reserved capacity is the alternative. You commit to a number of vCores in a region and service tier for a one or three year term, and in exchange Azure discounts the compute rate on any matching database for the life of the reservation.
Azure Advisor surfaces this as a cost recommendation: 'Consider SQL PaaS DB reserved instance to save over the pay-as-you-go costs' (it appears in newer portals as '(Preview) Consider SQL PaaS DB reserved capacity to save over your pay-as-you-go costs'). Advisor looks at your past 30 days of SQL usage, finds the capacity you have been running consistently, and works out how much the equivalent reservation would have saved. It only raises the recommendation when there is a stable baseline worth committing to, which is why it is one of the safer cost recommendations to act on.
The key thing to understand is that a reservation is a billing instrument, not a deployment. You do not move, resize or redeploy any database. The reservation is a commitment that sits over your billing account, and Azure automatically applies the discounted rate to whatever matching vCores are running at any moment. Buy the reservation and the databases you already have keep running exactly as they were, just at a lower compute rate.
In this lesson you will learn how Azure SQL reserved capacity discounts vCore compute, how Advisor decides there is a stable baseline worth reserving, how to size and buy the reservation safely with the az CLI or Bicep, and how the size flexibility and exchange rules keep the commitment from boxing you in. The focus throughout is the savings: what the reservation takes off the bill, what the payback looks like, and which calls are risk-free versus a genuine trade-off.
Same database, smaller bill
A reservation is one of the few changes you can make in Azure that lowers a production bill without anyone touching production. There is no migration, no downtime, no resize and no config change on the database itself: the discounted rate is applied at the billing layer to whatever matching vCores happen to be running. A team can buy a three-year SQL reservation in the portal at the end of a sprint review and the only observable effect is that next month's invoice for an unchanged set of databases is materially smaller. The catch, and the reason Advisor only recommends it on a steady baseline, is that the discount is paid for with a commitment: the value only lands if the capacity really does keep running.
Sizing a SQL reservation from real usage
Priya is the platform lead at a SaaS company whose core product runs on a handful of Azure SQL Database General Purpose Gen5 databases. Advisor has raised the SQL PaaS reserved-capacity recommendation, estimating a saving against the current pay-as-you-go spend.
Before committing to anything, Priya wants to see the actual reservation recommendation Advisor has generated, including the vCore quantity and term it has sized from the last 30 days of usage, so the commitment matches the real baseline rather than a guess.
Pull the SQL reserved-capacity recommendations Advisor has generated for the subscription. The Cost category recommendations carry the suggested SKU, region, term and saving.
Advisor only raises this when it sees a stable baseline worth committing to. The recommended quantity is the floor it observed over 30 days, not your peak.
How a SQL reservation applies the discountdeep dive
A reservation does not attach to a specific database. It is a commitment to a quantity of vCores for a given resource type ('SqlDatabases' or 'SqlManagedInstances'), region, service tier and hardware generation, held against a billing scope. Each hour, Azure looks at the matching SQL compute running in that scope and applies the reserved rate to as many vCores as the reservation covers, then bills anything above that at the normal pay-as-you-go rate. Add or remove databases and the discount simply flows to whatever matches, up to the reserved quantity.
Two flexibility features keep the commitment from being brittle. vCore size flexibility means you can scale a database up or down, or move capacity between single databases and elastic pools, within the same service tier and region without losing the benefit: reserve 16 General Purpose Gen5 vCores and the discount covers, say, a 4 vCore database plus an 8 vCore pool just as readily. Scope flexibility means the reservation can be applied to a single subscription, a resource group, a management group, or shared across all eligible subscriptions in the billing account, so you are not pinned to where the workload sits today.
The boundaries matter as much as the flexibility. The reserved rate covers compute vCores only: storage, backups, networking and any SQL Server licence cost are billed separately and are not discounted. The discount does not cross service tiers (General Purpose, Business Critical, Hyperscale) or regions. And reservations do not apply to the serverless compute tier or to DTU-based (Basic, Standard, Premium) databases at all, so those need to move to provisioned vCore first to be reservable. Knowing exactly what the reservation does and does not cover is what stops a commitment being mis-sized.
What is the impact of leaving SQL capacity unreserved?
The direct impact is straightforward overspend. A vCore database that runs a steady shape around the clock on pay-as-you-go is paying the on-demand premium every hour for capacity it is demonstrably going to keep using. Across an estate of stable production databases that compounds into a material, recurring overpayment, which is exactly the gap Advisor quantifies from your own 30-day usage when it raises the recommendation.
The second-order impact is that the unclaimed saving is invisible until someone looks. Pay-as-you-go is the default, so a database that settled into a steady size months ago keeps quietly billing at full rate with nothing flagging it on the invoice itself. The cost is not a spike that triggers an alert; it is a flat line that is simply higher than it needs to be, which is why these recommendations can sit open for a long time.
There is also an opportunity cost in capital terms. Money spent on undiscounted compute is money not spent elsewhere, and for a finance function the difference between a committed, discounted SQL line and an open pay-as-you-go one is real budget that could fund other work. Capturing the discount on the stable baseline is one of the highest-confidence cost moves available in Azure precisely because Advisor only surfaces it when the usage justifies it.
How do you buy a SQL reservation safely?
Treat this as a sizing exercise, not a shopping trip. The order matters: confirm the baseline and price the commitment before you buy, so you reserve the floor you actually run and not a number that strands spend.
1. Read what Advisor actually recommended
Start from the Advisor SQL reserved-capacity recommendation, which is sized from your last 30 days of usage. Note the resource type, region, service tier, hardware generation and the vCore quantity it suggests. That quantity is the observed baseline, the capacity you ran consistently, which is the safe target to reserve.
2. Separate the steady baseline from the spike
Reserve only the capacity that runs around the clock. Seasonal, batch or experimental vCores that are idle most of the time belong on pay-as-you-go, because a reservation on idle capacity strands spend instead of saving it. Confirm the databases are provisioned vCore, not serverless or DTU-based, since those are not reservable.
3. Price both terms before committing
Use the calculate command to see the exact price and saving for one-year versus three-year before you buy. Match the term to your confidence in the workload's longevity: three years captures Azure's documented discount ceiling, one year commits for less. Choose the broadest sensible scope (shared or management group) so the discount can flow as workloads move.
4. Buy, then track it as captured value
Purchase the reservation, then record the expected monthly saving and the exchange and refund path. Reservations are exchangeable without penalty and refundable within the rolling USD 50,000 quota, so a workload that genuinely changes is recoverable. Re-check Advisor periodically as usage grows, since a larger steady baseline may justify topping up the reservation.
# 1. Price the commitment first: calculate 3-year vs 1-year before buying.
# Replace <sku> with the recommended SKU and <billing-scope> with your
# subscription id. Read the recommended values from Azure Advisor.
az reservations reservation-order calculate \
--reserved-resource-type SqlDatabases \
--sku <sku> \
--location uksouth \
--term P3Y \
--billing-plan Monthly \
--quantity 16 \
--applied-scope-type Shared \
--billing-scope <billing-scope> \
--display-name sql-gp-gen5-uksouth
# 2. When the price and saving look right, purchase the reservation order.
# Generate a fresh order id; the discount then applies automatically to
# matching vCores in scope, no database is touched.
order_id=$(cat /proc/sys/kernel/random/uuid)
az reservations reservation-order purchase \
--reservation-order-id "$order_id" \
--reserved-resource-type SqlDatabases \
--sku <sku> \
--location uksouth \
--term P3Y \
--billing-plan Monthly \
--quantity 16 \
--applied-scope-type Shared \
--billing-scope <billing-scope> \
--display-name sql-gp-gen5-uksouth Quick quiz
Question 1 of 5Azure Advisor raises 'Consider SQL PaaS DB reserved instance to save over the pay-as-you-go costs'. What does buying the reservation change about your databases?
You scored
0 / 5
Keep learning
Go deeper on how Azure SQL reservations are priced, sized and managed across the term.
- Save on compute costs with Azure Reservations (Azure SQL) How the SQL reservation discount applies, including vCore size flexibility and scope.
- Cost recommendations in Azure Advisor The reference for the SQL PaaS reserved-capacity recommendation and how it is calculated.
- Self-service exchanges and refunds for Azure Reservations The exchange and refund rules, including the rolling refund quota that bounds the commitment.
You can now treat the SQL reserved-capacity recommendation as what it is: a billing decision that discounts compute on databases you already run, without touching one of them. Read what Advisor sized from your real usage, reserve the steady baseline and leave the spike flexible, price both terms before committing, and record the saving and the exchange and refund path so the commitment is understood as recoverable. The result is a smaller, committed SQL line for an unchanged estate.
Back to the library