Skip to main content
emnode
Cost

Cap transaction billing with Standard SSD disks

Standard HDD disks bill every I/O with no ceiling, so a high-throughput workload can run up an unbounded transaction charge. Moving it to Standard SSD caps the billable transactions per hour, turning a runaway line item into a predictable one and often a smaller one.

13 min·10 sections·AZURE

Last reviewed

Standard SSD billing caps: the basics

Why a cheaper-looking HDD can cost more than the SSD next to it

An Azure managed disk bill has two parts: a fixed monthly charge for the provisioned capacity, and a variable charge for the transactions the disk actually serves. On a Standard HDD, every billable transaction is charged with no upper limit, so a disk that takes a lot of small reads and writes keeps accruing transaction cost hour after hour. On a Standard SSD, the same variable charge exists, but Microsoft caps the number of billable transactions per hour by disk size. Once an hour's transactions reach that cap, the rest of that hour's I/O is free. Same workload, two very different bills.

A transaction here is an I/O operation of up to 256 KiB. An operation larger than 256 KiB is counted as multiple transactions, one per 256 KiB block. A chatty workload, an OS disk under load, a transactional database, a log volume, generates a high transaction count, and that is exactly the shape where the HDD's uncapped billing hurts and the SSD's cap helps. The capacity rate on a Standard HDD is lower, which is what makes it look cheaper at a glance, but for a high-IO disk the uncapped transaction charge can more than make up the difference.

Azure Advisor surfaces this as a cost recommendation: it looks at your Standard HDD disks, spots the ones whose transaction profile would bill less under a Standard SSD's capped model, and recommends the upgrade. It is one of the rare cost levers that improves the workload at the same time, because Standard SSD also delivers lower and more consistent latency than HDD. The job is to find the high-IO HDDs, confirm the SSD would bill less or about the same, and convert them.

In this lesson you will learn how Azure prices managed disk transactions, why an uncapped Standard HDD can cost more than the Standard SSD beside it, how the Azure Advisor 'Standard SSD disks billing caps' recommendation finds the disks worth converting, and how to convert them in place with the az CLI or Bicep without a migration project.

Fun fact

The cheaper disk with the bigger bill

It feels backwards, but on Azure a Standard HDD can bill more than a Standard SSD for the same workload. The HDD has a lower capacity rate and a lower per-transaction rate, yet its transactions are uncapped, while the SSD caps billable transactions per hour by disk size. For a high-IO disk the uncapped HDD charge can run past the capped SSD charge, so the 'budget' tier ends up the expensive one. Microsoft introduced these Standard SSD billing caps in March 2023, and they apply automatically to every Standard SSD disk, OS or data, with no action needed once the disk is on that tier.

Finding the high-IO HDDs worth converting

Priya runs the platform team at a SaaS company whose Azure bill has been creeping up faster than its usage. Azure Advisor has raised a cost recommendation, 'Standard SSD disks billing caps', pointing at several Standard HDD disks attached to busy VMs.

Rather than convert everything Advisor lists on faith, Priya starts by pulling out the Standard HDD disks in the subscription so the team can line each one up against its transaction profile before changing anything.

List the Standard HDD managed disks and the VM each is attached to. These are the candidates Advisor is flagging.

$ az disk list --query "[?sku.name=='Standard_LRS'].{name:name, gb:diskSizeGb, attachedTo:managedBy}" -o table
Name Gb AttachedTo
---------------- ---- --------------------------------
db01-data 256 .../virtualMachines/db01
logs01-data 128 .../virtualMachines/logs01
archive99-data 1024 None
# db01 and logs01 are busy and attached. archive99 is idle: leave it on HDD.

Standard_LRS is the Standard HDD SKU. The high-IO attached disks are the conversion candidates; an idle archive disk with low transactions stays cheaper on HDD.

How Advisor decides a disk should move to Standard SSDdeep dive

The mechanism is the difference in how the two tiers bill transactions. On a Standard SSD, the number of billable transactions per hour is capped, and the cap scales with disk size: the larger the disk, the higher the hourly ceiling before transactions stop being charged. Microsoft publishes the cap per disk size; for example, an E4 disk has an hourly billable-transaction cap of 43,400. On a Standard HDD there is no such cap, so every transaction is billed for as long as the workload generates them.

A transaction is an I/O operation of up to 256 KiB. Anything larger is split and counted as multiple 256 KiB transactions for billing. Advisor models each Standard HDD disk's recent transaction profile against the SSD cap and capacity rate, and raises the 'Standard SSD disks billing caps' recommendation, recommendation ID 201fb2fe-989f-45c1-8533-785ee8a4a08f, on the disks where the capped SSD model would bill less, while delivering lower, more consistent latency at the same time.

Two operational facts shape the conversion. First, changing a managed disk's type is an in-place operation but requires the VM to be deallocated, so it needs a short maintenance window. Second, Azure limits you to changing a disk's type twice per day, which matters if you are scripting bulk conversions and want a safe rollback path. The billing caps themselves need no configuration: they apply automatically to every Standard SSD disk the moment it is on that tier.

What is the impact of leaving high-IO disks on Standard HDD?

The direct impact is an inflated, unpredictable disk bill. A high-IO Standard HDD keeps billing transactions with no ceiling, so its cost tracks workload volume and offers no protection when I/O spikes. The same disk on Standard SSD would stop accruing transaction charges once an hour's cap is reached, so the bill is both lower for a busy disk and far more predictable, which is what makes it forecastable.

The second-order impact is performance left on the table. Standard SSD delivers lower and more consistent latency than Standard HDD, so a transaction-heavy OS disk, database volume or log disk that stays on HDD is paying more and running slower than it needs to. Leaving the Advisor recommendation unactioned forfeits both the saving and the responsiveness.

There is also a hygiene cost to letting Advisor cost recommendations pile up. Each unworked flag is a small, known saving the organisation has chosen not to take, and a backlog of them is exactly the drift that makes a cloud bill creep up while usage looks flat. The cheapest and most defensible FinOps artefact is a cleared Advisor cost backlog with each decision, converted or deliberately left, recorded.

How do you convert the right disks safely?

Work the recommendation as a quantify-then-convert loop, not a blanket upgrade. The order matters: confirm a disk is genuinely transaction-heavy before converting it, because a low-IO disk can cost slightly more on Standard SSD.

1. Inventory the Standard HDD disks Advisor flagged

List the Standard_LRS managed disks in scope and note which VM each is attached to and its size. The attached, busy disks are the candidates; idle or archive disks with few transactions are usually cheaper left on HDD and should come off the list.

2. Quantify each candidate against its real I/O

For each flagged disk, pull the transaction metric over a representative week and compare the uncapped HDD transaction charge against the SSD's per-hour cap plus its higher capacity rate. Convert the disks where the SSD bills less or where the latency gain justifies a break-even cost. Leave the genuinely low-IO disks on HDD.

3. Convert in place during a short window

A disk type change is an in-place conversion but needs the VM deallocated, so schedule a brief maintenance window. Deallocate the VM, update the disk SKU to StandardSSD_LRS, then start the VM. The conversion itself is effectively instantaneous. Remember Azure allows only two disk-type changes per day, which preserves a same-day rollback.

4. Make Standard SSD the default for new high-IO disks

Stop the problem recurring by setting StandardSSD_LRS as the default disk SKU in your Bicep or Terraform modules for OS and high-IO data disks, so new workloads start on the capped tier rather than being flagged by Advisor later.

# Convert one quantified high-IO disk from Standard HDD to Standard SSD.
# A disk type change is in-place but needs the VM deallocated first.
rgName='yourResourceGroup'
diskName='db01-data'

# Find the VM the disk is attached to (empty if unattached).
vmId=$(az disk show --name "$diskName" --resource-group "$rgName" \
  --query managedBy --output tsv)

# Deallocate the VM, switch the disk to Standard SSD, then start it again.
az vm deallocate --ids "$vmId"
az disk update --name "$diskName" --resource-group "$rgName" \
  --sku StandardSSD_LRS
az vm start --ids "$vmId"
echo "$diskName converted to StandardSSD_LRS: transactions now capped per hour"

# Make new high-IO disks start on the capped tier (Bicep):
# resource dataDisk 'Microsoft.Compute/disks@2023-04-02' = {
#   name: diskName
#   location: location
#   sku: { name: 'StandardSSD_LRS' }
#   properties: {
#     creationData: { createOption: 'Empty' }
#     diskSizeGB: 256
#   }
# }

Quick quiz

Question 1 of 5

Why can a high-IO Standard HDD disk cost more than the equivalent Standard SSD disk?

You can now read the Azure Advisor 'Standard SSD disks billing caps' recommendation for what it is: a cost lever that turns an uncapped HDD transaction charge into a capped SSD one, usually for less money and always for better latency. Inventory the flagged Standard HDD disks, quantify each against its real I/O, convert the high-IO ones in place with a short maintenance window, leave the genuinely idle ones on HDD, and default new high-IO disks to Standard SSD so the recommendation stops recurring.

Back to the library