Reserving MySQL capacity: the basics
What is Azure actually charging you a premium for?
An Azure Database for MySQL Flexible Server that runs around the clock is the textbook candidate for a reservation. Pay-as-you-go pricing buys you the right to stop paying the moment you delete the server, and for a steady production database you never exercise that right. You keep the server running month after month and pay the on-demand rate for the privilege of a flexibility you do not use. A reserved capacity commitment is the deal where you give back that flexibility, commit to keep an equivalent amount of MySQL compute running for one or three years, and Azure drops the compute rate in exchange.
Azure Advisor spots this for you. Its cost recommendation, 'Consider Database for MySQL reserved instance to save over the pay-as-you-go costs', looks at your recent compute usage and flags servers steady enough that a reservation would cost less than continuing on demand. It is the clearest kind of finding on the report: there is no risk to weigh and no security door to close, only money being left on the table on workloads you are going to run anyway.
The important detail is what the reservation does and does not cover. It is a billing instrument, not a resource. It discounts the compute (vCore) portion of a matching Flexible Server, and it does not touch storage, backup, networking or any software charge, which keep billing at their normal rates. You do not migrate, resize or restart anything. The server runs exactly as before; only the compute line on the invoice changes.
In this lesson you will learn why a steady Azure Database for MySQL Flexible Server is a strong reservation candidate, how to read and right-size the Azure Advisor recommendation, exactly what a reservation does and does not discount, and how to buy one from the CLI or Bicep without touching the running server. You will also learn where the genuine trade-off sits, so you commit the baseline you are sure of and keep variable workloads on demand.
The discount that was always sitting there
Azure reservations are a pure billing construct: buying one creates no new resource, changes no setting on your server and is invisible to the application. The discount is applied after the fact, hour by hour, by matching your reservation's attributes against the compute you are already consuming. That is why a reservation can start saving money minutes after purchase with nobody touching the database, and why the saving silently stops the day the term ends unless you renew. The capacity was always running. The reservation just stopped you paying the on-demand premium for it.
Finding the reservable MySQL spend
Priya runs the platform team at a SaaS company whose product sits on a handful of Azure Database for MySQL Flexible Servers that have run continuously since launch. Azure Advisor has surfaced the cost recommendation 'Consider Database for MySQL reserved instance to save over the pay-as-you-go costs' against the production subscription.
Before committing to anything, Priya wants to see exactly what Advisor is recommending and how big it sizes the saving, so the commitment matches real baseline rather than a spike. She starts by pulling the cost recommendation straight from the Advisor API.
Pull the Advisor cost recommendations for the subscription and look for the Database for MySQL reserved capacity prompt. This is the same recommendation the portal shows, read straight from the API.
Advisor flags the opportunity and its size, but it is per subscription and based on a 30 day look-back. Before buying, confirm how much compute actually runs steady-state so you reserve the baseline, not the peak.
How an Azure reservation discount actually appliesdeep dive
A reservation is matched to usage by its attributes, not bound to a specific server. The discount applies to any Azure Database for MySQL Flexible Server compute in the reservation's region and performance tier that fits the reserved quantity, for every hour that compute runs. Because of vCore size flexibility, a reservation bought at one vCore size applies across other sizes in the same tier and region, so scaling a server up or down within the tier does not strand the benefit. If you run less matching compute in an hour than you reserved, the unused portion of that hour is simply not discounted; it does not roll over.
The reservation covers compute only. Storage, backup, networking and any software or licence component of the MySQL bill keep billing at their normal pay-as-you-go rates. This is why the saving is best reasoned about as a discount on a known slice of the invoice rather than on the server as a whole, and why a reservation never changes how the server behaves: it is an accounting overlay, applied after the meter records usage.
The commitment is fixed at purchase. You choose a one-year (P1Y) or three-year (P3Y) term and an Upfront or Monthly billing plan, and you cannot change the billing plan afterwards without going through the exchange process. The reservation does not auto-renew: when the term ends the discount stops and the compute reverts to pay-as-you-go, so the renewal decision is one to diarise rather than assume.
What is the impact of leaving steady MySQL on pay-as-you-go?
The direct impact is overspend. Every hour a steady production database runs at the on-demand rate when it qualifies for a reservation is a premium paid for flexibility the workload never uses. Across an always-on fleet over a one or three year horizon, that premium compounds into a material and entirely avoidable line on the bill. Microsoft documents the compute saving as up to roughly two-thirds off pay-as-you-go on the longest term, so the gap between the reserved and on-demand rate is the recurring cost of inaction.
The second-order impact is forecast quality. On-demand spend on permanent workloads makes the database bill look more variable than the business actually is, which muddies budgeting. A reservation converts a slice of that spend into a known, committed rate for the term, so the always-on baseline becomes a fixed and predictable number rather than a monthly on-demand figure that drifts with usage.
There is no security or compliance consequence here, which is exactly what makes this finding distinctive. Unlike most recommendations on a cost-and-security report, the only thing at stake is money. The downside of acting is bounded by the commitment, and the downside of not acting is paying the on-demand premium indefinitely on workloads you have already decided to keep.
How do you reserve MySQL capacity safely?
Treat the purchase as a sizing exercise, not a one-click accept. The order matters: confirm the baseline is genuinely permanent before you commit to a term, so the commitment never outruns the demand behind it.
1. Confirm the baseline from real usage
Pull the Advisor recommendation and check it against the actual run history of each candidate server. Reserve only the compute that has been steady and is expected to keep running. A server that was recently scaled up for a one-off event is not baseline yet, so exclude it until it proves out.
2. Match the reservation attributes to the server
A reservation discounts compute in a specific region and performance tier, sized in vCores. Read the region, tier and size off the server so the reservation lands on it. vCore size flexibility means you do not have to match the exact size within the tier, but you must match the region and tier, or the discount will not apply.
3. Choose term, scope and billing plan deliberately
Pick a three-year (P3Y) term for proven permanent baseline to get the deepest discount, and a one-year (P1Y) term where confidence is lower. Set the scope to Shared to let the discount float across subscriptions, or Single to pin it to one. Choose Upfront or Monthly billing, remembering the billing plan cannot be changed later without an exchange.
4. Price it, buy it, and diarise the renewal
Run the calculate step first to confirm the price and saving, then purchase. Because reservations do not auto-renew, set a reminder before the term ends so the discount does not silently lapse back to pay-as-you-go. Leave genuinely variable capacity on demand rather than over-committing.
# 1. Read the target server's region, tier and size so the reservation matches it.
az mysql flexible-server show \
--resource-group prod-rg --name prod-mysql-01 \
--query "{region:location, sku:sku.name, tier:sku.tier}" -o table
# 2. Price the reservation BEFORE buying. Confirm the saving and exact terms.
sub=$(az account show --query id -o tsv)
az reservations reservation-order calculate \
--reserved-resource-type MySql \
--sku Standard_D4ds_v4 \
--location westeurope \
--term P3Y \
--billing-plan Upfront \
--quantity 2 \
--applied-scope-type Shared \
--billing-scope "$sub" \
--display-name prod-mysql-reservation
# 3. Purchase only the proven baseline. A new reservation order id is a fresh GUID.
order_id=$(cat /proc/sys/kernel/random/uuid)
az reservations reservation-order purchase \
--reservation-order-id "$order_id" \
--reserved-resource-type MySql \
--sku Standard_D4ds_v4 \
--location westeurope \
--term P3Y \
--billing-plan Upfront \
--quantity 2 \
--applied-scope-type Shared \
--billing-scope "$sub" \
--display-name prod-mysql-reservation Quick quiz
Question 1 of 5Azure Advisor recommends a Database for MySQL reserved instance against a production subscription. What is the most accurate way to think about what a reservation is?
You scored
0 / 5
Keep learning
Go deeper on how Azure Database for MySQL reservations are priced, how the discount is applied, and how to manage the commitment over its term.
- Prepay for compute with reserved capacity, Azure Database for MySQL What a MySQL reservation covers, the term and scope choices, and how to buy one.
- Understand how the reservation discount is applied to Azure Database for MySQL How the compute discount is matched to usage hour by hour, and what it excludes.
- What are Azure reservations? Terms, scopes, billing plans, exchange and refund rules, and how Advisor sizes recommendations.
You can now treat a steady Azure Database for MySQL Flexible Server as a reservation candidate rather than a standing on-demand cost: read the Advisor recommendation, confirm the baseline is genuinely permanent, match the reservation's region and tier to the server, price it with the calculate step, and buy only what you are confident you will run for the term. The server never changes; only the compute line on the bill does.
Back to the library