Skip to main content
emnode
Cost

Buy Azure Data Explorer reserved capacity

Azure Advisor flags clusters with steady, predictable usage where a one or three year commitment to the Azure Data Explorer markup meter takes that line item off pay-as-you-go rates. This lesson is about turning that recommendation into a sized, scoped purchase that lowers the bill without changing how anything runs.

13 min·10 sections·AZURE

Last reviewed

Data Explorer reserved capacity: the basics

What is Azure actually recommending you prepay for?

Azure Data Explorer is billed in layers. The underlying virtual machines that make up the engine and data-management clusters are one charge, storage and networking are others, and on top of that sits a separate Azure Data Explorer 'markup' meter, the per-core software charge for running the Kusto engine itself. Azure Advisor watches the markup meter, and when a cluster runs steadily enough that a year or more of it is effectively guaranteed, it raises the recommendation 'Consider Azure Data Explorer reserved instance to save over the on-demand costs'. That is the whole subject of this lesson: committing to that markup meter for one or three years in exchange for a lower rate.

A reservation here is purely a billing instrument. You commit to a quantity of Azure Data Explorer markup units, where one unit maps to one engine cluster core in production, for a one or three year term, and Microsoft applies a discount to the matching markup consumption on an hour-by-hour basis. Nothing about the cluster changes: no redeploy, no downtime, no version pin, no SKU lock. Clusters already running, and any you deploy later, automatically draw down the reservation as long as their markup usage matches its attributes. Microsoft documents savings of up to thirty per cent on the markup costs against pay-as-you-go.

The one detail that catches teams out is scope. The reservation covers the markup meter and only the markup meter. It does not cover the compute, the storage or the networking under the cluster, those are billed separately and, if you want to optimise them too, reserved separately. So the Advisor recommendation is a real but bounded saving: it trims one specific layer of the Data Explorer bill, and the job is to size that layer correctly, scope the reservation so the discount actually lands, and stack a separate compute reservation underneath it where the numbers justify it.

In this lesson you will learn what the Azure Data Explorer reserved capacity recommendation actually covers, how to size the commitment from real markup usage, how to scope and buy the reservation so the discount lands on the right subscriptions, and where a separate compute reservation stacks underneath it for a larger total saving. You will also see why this is a billing change with no effect on how the cluster runs.

Fun fact

The meter most teams forget they are paying twice for

Azure Data Explorer is one of the few Azure services where a single cluster generates reservation recommendations on two different layers at once: the underlying virtual machines and the separate Data Explorer markup meter. Teams routinely reserve the VMs, see the bill drop, and assume the cluster is optimised, while the markup meter quietly keeps running at full pay-as-you-go rates because it is a distinct line item with its own reservation. Microsoft's own guidance spells it out: to get the full saving on a Data Explorer cluster you buy the markup reservation and the VM reservation, because neither one covers the other.

Sizing the commitment from real markup usage

Priya runs the platform team at a telemetry company whose Azure Data Explorer clusters ingest device data around the clock. Advisor has surfaced 'Consider Azure Data Explorer reserved instance to save over the on-demand costs' against the production subscription, and she wants to commit to the steady floor of usage rather than guess.

Before buying anything she checks what the engine clusters actually run, because the reservation is sized in markup units and one unit equals one production engine cluster core. The dev and test cluster does not count, so she lists the clusters and their engine core counts to find the number that is genuinely always on.

List the Data Explorer clusters and their engine SKU and instance count, so you can total the production engine cores that the markup reservation should cover.

$ az kusto cluster list --query "[].{name:name, sku:sku.name, tier:sku.tier, instances:sku.capacity}" -o table
Name Sku Tier Instances
---------------- ------------------- -------- ---------
telemetry-prod Standard_D13_v2 Standard 2
telemetry-dev Dev(No SLA)_Standard_E2a_v4 Basic 1
# telemetry-prod: 2 x D13_v2 = 16 engine cores = 16 markup units, always on.
# telemetry-dev is a Dev/No-SLA SKU: it does NOT generate markup units. Exclude it.

Reserve the steady production engine cores only. Dev and test SKUs do not consume the markup meter, so they never draw down the reservation.

How the Data Explorer markup reservation discount is applieddeep dive

The reservation is matched and applied per hour. You commit to a quantity of Azure Data Explorer markup units, and each hour Microsoft looks for matching markup consumption across the reservation's scope and applies the discounted rate to that consumption, billing any usage above the reserved quantity at pay-as-you-go. The match is on the markup meter only: a sixteen unit reservation covers sixteen engine cores of markup an hour, whether that is one sixteen core cluster, two eight core clusters, or sixteen cores spread across different regions, because the purchase applies to all regions.

The discount is use-it-or-lose-it on an hourly basis. If in a given hour you have fewer matching markup units running than you reserved, the unused portion of the reservation is lost for that hour, it does not roll forward. When a cluster is stopped or suspended its underlying compute is deallocated, so it consumes no markup that hour and the reservation looks for another matching cluster in scope, applying the discount there if one exists. This is why sizing to the steady floor matters: a reservation sized to the peak sits partly idle, and idle reserved hours are forfeited, not banked.

Crucially, the meter the reservation matches is narrow. It is the Data Explorer markup, not the virtual machine compute, the managed disk storage or the networking that operate the cluster. Microsoft's guidance is explicit that to maximise the saving you also buy a reservation for the virtual machines used by the cluster, and reserve storage and networking separately where it pays. The markup reservation and the VM reservation are independent instruments that stack: each discounts its own layer, and neither one will silently cover the other.

What is the impact of leaving steady usage on pay-as-you-go?

The direct impact is overpayment on a predictable line item. Every hour a steadily running engine cluster bills its markup at the pay-as-you-go rate is an hour that could have been discounted by up to thirty per cent under a reservation. For a cluster that runs around the clock, that gap compounds into a meaningful annual figure on the markup layer alone, and it accrues silently because nothing is broken, the workload simply costs more than it needs to.

The second-order impact is an incomplete optimisation that looks finished. Because Data Explorer bills compute and markup as separate meters, a team that reserves only the virtual machines sees the bill drop and reasonably assumes the cluster is optimised, while the markup meter keeps running at full price. The recommendation exists precisely to catch that blind spot, and ignoring it leaves a known, quantified saving unclaimed on a workload that is otherwise already committed.

There is no downside risk to weigh against capturing the saving, only a sizing risk to manage. Over-committing forfeits some unused discount but never costs more than pay-as-you-go would have, and the commitment is exchangeable or cancellable for a bounded fee. So the impact of inaction is not danger, it is steady, recoverable waste: paying list price for analytics capacity the organisation has already decided to run for the foreseeable future.

How do you buy the reservation correctly?

Treat this as a sizing exercise followed by a single purchase. The order matters: confirm the steady markup floor before you commit, so the reservation is fully utilised rather than partly idle, and scope it so the discount lands where the clusters actually run.

1. Size to the steady floor of markup units

Total the production engine cluster cores that are genuinely always on, since one markup unit equals one production engine core and dev or test SKUs do not count. Reserve that floor, not the peak. A reservation sized above steady usage forfeits unused hours, while one sized to the floor is fully drawn down every hour and leaves variable headroom on flexible pay-as-you-go.

2. Choose the term and billing plan

A three year term carries a deeper discount than one year, so match the term to how confident you are the workload will persist: three years for the certain floor, one year for usage that is likely but less locked in. Default to monthly billing, which costs the same in total as paying upfront but keeps the commitment off the capital line.

3. Scope the reservation so the discount lands

Use a shared scope to let the discount float across every subscription that runs Data Explorer, or a single-subscription scope to pin it to one. Because the purchase applies the markup discount across all regions automatically, scope is about which billing accounts can draw it down, not which regions, so pick the scope that matches where the steady clusters live.

4. Stack a compute reservation underneath it

The markup reservation discounts only the markup meter. To capture the larger compute saving on the same cluster, buy a separate virtual machine reservation, and reserve storage where it pays, as Microsoft recommends. Then add both to the standing reservation review so utilisation is checked each quarter and the commitments are resized before they expire.

# 1. Confirm the steady production engine cores (= markup units to reserve).
#    Dev/No-SLA SKUs do not consume the markup meter, so exclude them.
az kusto cluster list \
  --query "[?sku.tier=='Standard'].{name:name, sku:sku.name, cores:sku.capacity}" -o table

# 2. Price the reservation before committing. AzureDataExplorer is a first-class
#    reserved-resource-type; term is P1Y or P3Y; bill monthly to spare the capital line.
#    <markup-units> = total always-on production engine cores from step 1.
#    <billing-sub>  = subscription that pays for the reservation.
az reservations reservation-order calculate \
  --reserved-resource-type AzureDataExplorer \
  --sku AzureDataExplorer \
  --term P3Y \
  --billing-plan Monthly \
  --quantity <markup-units> \
  --applied-scope-type Shared \
  --billing-scope <billing-sub> \
  --display-name adx-markup-3yr

# 3. Purchase against the order id the calculate step returns.
#    Review the Costs total in the calculate output first; this commits real spend.
az reservations reservation-order purchase \
  --reservation-order-id <order-id-from-calculate> \
  --reserved-resource-type AzureDataExplorer \
  --sku AzureDataExplorer \
  --term P3Y \
  --billing-plan Monthly \
  --quantity <markup-units> \
  --applied-scope-type Shared \
  --billing-scope <billing-sub> \
  --display-name adx-markup-3yr

Quick quiz

Question 1 of 5

Advisor raises 'Consider Azure Data Explorer reserved instance to save over the on-demand costs'. What exactly does buying this reservation discount?

You can now turn the Data Explorer reservation recommendation into a sound purchase: understand that it discounts only the markup meter, size the commitment to the steady floor of production engine cores, choose the term and scope so the discount lands and stays fully utilised, and stack a separate compute reservation underneath it for the larger saving. Nothing about the cluster changes; only the rate on spend you were always going to incur.

Back to the library