Skip to main content
emnode
Cost

Move high-transaction storage to premium tier

When a storage account runs a lot of operations against a small amount of data, the transaction charges, not the gigabytes, dominate the bill. Azure Advisor flags these accounts because premium block blob storage prices transactions far lower, so the higher per-gigabyte rate is often more than repaid.

14 min·10 sections·AZURE

Last reviewed

Premium for high-transaction storage: the basics

Why a busy storage account can be cheaper on the more expensive tier

Azure Storage charges along two axes that people tend to conflate: the gigabytes you keep, and the operations you run against them. A standard general-purpose v2 account is priced so that storage is cheap and each read, write, list or property operation carries a small per-operation charge. That model is ideal for an account holding a large amount of data that is rarely touched. It is the wrong model for the opposite shape: a small amount of data hammered by a very high number of operations, where those tiny per-operation charges add up to most of the bill.

Premium block blob storage inverts the trade. It charges more per gigabyte but far less per transaction, because the data sits on solid-state hardware tuned for low-latency, high-throughput access. For an account whose cost is dominated by transactions rather than capacity, paying the higher storage rate on a few terabytes can be cheaper overall than paying standard transaction rates on tens of millions of operations. Azure Advisor watches for exactly this shape and raises the recommendation 'Based on your high transactions/TB ratio, premium storage might be more cost effective in addition to being performant for your scenario.'

The signal Advisor uses is the transactions-per-terabyte ratio. Microsoft's guidance is that workloads running roughly 35 to 40 transactions per second per terabyte of data, or more, are good candidates to evaluate. Below that, standard is usually the cheaper home. Above it, the transaction discount on premium starts to outweigh the storage premium, and you get lower latency as a bonus. The recommendation is a prompt to do the arithmetic on a specific account, not an instruction to move everything.

In this lesson you will learn why Azure Storage transaction charges, not capacity, drive the bill on busy accounts, how the Azure Advisor high transactions/TB recommendation identifies the accounts where premium block blob storage is cheaper overall, how to model the saving for a specific account, and how to migrate safely given that you cannot convert an account to premium in place. The aim is to turn the Advisor flag into a confident yes or no with a number attached.

Fun fact

The tier that costs more to store and less to use

It feels backwards that the premium storage tier, which has the higher per-gigabyte price, can produce a lower monthly bill. The reason is that Azure unbundles storage from usage. Premium block blob storage runs on solid-state hardware and prices transactions at a fraction of the standard rate, so the more you read and write, the more that transaction discount works in your favour. There is a crossover point, around 35 to 40 transactions per second per terabyte, where the operations saving overtakes the storage premium. Above it, premium is both faster and cheaper; below it, standard wins. Advisor's whole job here is to spot the accounts that have crossed that line.

Confirming an account really is transaction-bound

Priya runs the platform team at a SaaS company whose ingestion pipeline writes a steady stream of small objects into one storage account. Advisor has raised the high transactions/TB recommendation against it, suggesting premium block blob storage.

Before standing up a new account, Priya wants to confirm the account really is transaction-bound rather than capacity-bound, so she pulls its own metrics: how many transactions it runs and how much data it actually holds.

Pull the account's transaction count and stored capacity from Azure Monitor, then sanity-check the ratio that Advisor is reacting to.

$ rid=$(az storage account show -n ingestprod -g pipeline-rg --query id -o tsv) az monitor metrics list --resource "$rid/blobServices/default" \ --metric Transactions --aggregation Total --interval PT1H -o table
Timestamp Name Total
------------------- ------------ ----------
2026-06-16T09:00:00 Transactions 41832004
2026-06-16T10:00:00 Transactions 43560119
# ~42M transactions/hour against ~3 TB stored: ratio is well past 35-40 TPS/TB.
# Transaction-bound, not capacity-bound. Premium is worth modelling.

Roughly 42 million transactions an hour is about 11,600 transactions per second. Against 3 TB stored that is near 3,900 TPS/TB, far above the 35 to 40 candidate threshold, so this account is a strong candidate to model.

How Advisor decides premium might be cheaperdeep dive

The recommendation keys off the transactions-per-terabyte ratio: total transactions over a recent window divided by the average data stored. A standard general-purpose v2 account prices storage low and charges per transaction, so as that ratio climbs the transaction component of the bill grows until it dominates. Premium block blob storage flips the rates, pricing storage higher per gigabyte but transactions much lower, so there is a crossover ratio above which premium produces the smaller total. Microsoft places the candidate zone at roughly 35 to 40 transactions per second per terabyte and above; Advisor surfaces the recommendation when an account's measured ratio sits in or above that band.

Two platform facts shape how you act on it. First, you cannot convert a standard general-purpose v2 account to premium block blob in place: premium block blob is a distinct account kind, BlockBlobStorage, with the Premium SKU, so the move means creating a new account and copying the data across with a tool such as AzCopy. Second, premium block blob accounts do not support access tiers at all: there is no hot, cool, cold or archive, just premium, so any tiering logic on the source has to be dropped rather than carried over.

Advisor's number is a prompt, not a guarantee. It is computed from a recent window, so a transient spike, a one-off backfill or a burst of listing operations can push an otherwise capacity-bound account briefly over the line. The reliable move is to model the specific account from its own Transactions and UsedCapacity metrics over a representative period before committing, rather than acting on the flag alone. The recommendation tells you where to look; the per-account model tells you whether to move.

What is the impact of leaving a transaction-bound account on standard?

The direct impact is an avoidable run-rate cost. On a transaction-bound account, the per-operation charges at standard rates accumulate every hour the workload runs, and because the ratio that triggered the flag tends to be structural rather than transient, that overspend recurs month after month until the account is moved. The longer a flagged account stays on standard, the more of a saving you forgo, with nothing gained in return.

The second-order impact is performance you are paying for and not getting. Premium block blob storage runs on solid-state hardware with consistently lower latency, which is exactly what a high-transaction workload benefits from. Leaving such a workload on standard means it is both more expensive per operation and slower than it needs to be, so the standard tier is the worse outcome on both cost and performance for this specific shape of account.

There is no security or compliance penalty for staying on standard, and that is the point: this is purely an optimisation. The cost of inaction is a quiet, recurring overspend and a slower workload, not a risk on the register. That makes it easy to defer, which is precisely why it is worth surfacing the modelled annualised saving so the recurring cost of leaving it is visible rather than invisible.

How do you move a high-transaction account to premium safely?

Treat each flagged account as a small migration with a number attached. The order matters: confirm the saving before you build anything, and cut over only once the new account is validated, because premium block blob is a new account, not a setting flip.

1. Model the saving from the account's own metrics

Pull Transactions and UsedCapacity for the flagged account over a representative window with az monitor metrics list, then price the same workload at standard and at premium block blob rates and subtract. Confirm transactions genuinely dominate the bill and that the account was not flagged on a transient spike. Only proceed where the modelled monthly saving clearly clears the one-off migration cost.

2. Stand up a new premium block blob account

You cannot convert in place. Create a new account with kind BlockBlobStorage and the Premium SKU in the same region, carrying over the security settings you already enforce, such as secure transfer and a minimum TLS version. Remember that premium block blob does not support access tiers, so drop any hot, cool or archive tiering logic rather than trying to reproduce it.

3. Migrate the data and validate

Copy the data across with AzCopy, setting s2s-preserve-access-tier to false because the premium destination has no access tiers, and put-md5 to verify integrity. The intra-region copy incurs no egress charge. Validate object counts and checksums on the new account before any traffic moves, so the cutover is a confident switch rather than a hope.

4. Cut over, then decommission the old account

Repoint the application's connection string or endpoint at the new account, confirm the workload is healthy, and watch the next billing window to confirm the modelled saving is landing. Once you are satisfied, decommission the old standard account so you are not paying for two. Record the captured saving so the optimisation is visible on the cost review.

# 1. Confirm the account is transaction-bound, not capacity-bound.
rid=$(az storage account show -n ingestprod -g pipeline-rg --query id -o tsv)
az monitor metrics list --resource "$rid/blobServices/default" \
  --metric Transactions UsedCapacity --aggregation Total --interval PT1H -o table

# 2. Stand up the new premium block blob account (cannot convert in place).
#    Premium block blob has no access tiers, so none is set here.
az storage account create \
  --name ingestprodpremium \
  --resource-group pipeline-rg \
  --location eastus2 \
  --kind BlockBlobStorage \
  --sku Premium_LRS \
  --https-only true \
  --min-tls-version TLS1_2 \
  --allow-blob-public-access false

# 3. Migrate with AzCopy. s2s-preserve-access-tier=false because the
#    premium destination has no access tiers; put-md5 verifies integrity.
azcopy copy \
  'https://ingestprod.blob.core.windows.net/<container>?<SOURCE_SAS>' \
  'https://ingestprodpremium.blob.core.windows.net/<container>?<DEST_SAS>' \
  --recursive \
  --s2s-preserve-access-tier=false \
  --put-md5

# 4. Repoint the app at ingestprodpremium, confirm health and the saving,
#    then decommission the old standard account.

Quick quiz

Question 1 of 5

Azure Advisor raises 'Based on your high transactions/TB ratio, premium storage might be more cost effective' on an account. What is it actually telling you?

You can now read the Azure Advisor high transactions/TB recommendation for what it is: a prompt that an account's bill is driven by transactions rather than capacity, and that premium block blob storage, which prices transactions far lower, may be the cheaper home for it. You know to model the saving from the account's own Transactions and UsedCapacity metrics, to migrate by standing up a new BlockBlobStorage account and copying the data across because you cannot convert in place, and to cut over and confirm the saving lands.

Back to the library