Skip to main content
rightsizing · azure

Azure Premium Disk IOPS Downgrade

resource types
1
rule IDs covered
1
severity
medium

What does ZopNight detect here?

Premium_LRS disks provisioned at 500 IOPS or more whose observed 30-day peak stays under 20% of provisioned IOPS are stepped down one Premium tier at the same size. Savings come from the authoritative tier-rate delta; a missing metric series or rate makes the rule abstain rather than estimate.

Signal and threshold

How ZopNight evaluates Azure Premium Disk IOPS Downgrade.
Field Value
Rule IDsRC-1394
Categoryrightsizing
Severitymedium
Metricnone — pure configuration read
Sourcedisk_iops_downgrade.go

Provisioned IOPS versus the observed peak

  • resource.InstanceType must equal Premium_LRS (tier-delta math only applies inside the Premium family); other SKUs are skipped.
  • resource.Metadata.iopsReadWrite holds provisioned IOPS as a string; parsed to int via provisionedIOPSFromMetadata. Missing / empty / non-numeric returns (0, false) and the rule fails safe.
  • azurePremiumIOPSDowngradeMinProvisioned = 500, P10’s ceiling. Below this the rule cannot step down without leaving the Premium family, so it skips.
  • resource.Metadata.tier gives the current P-tier name (e.g. P30); used by the SKU-rate lookup and the next-smaller computation via skuladder.PremiumIOPSDowngrade. The discoverer writes this from the Azure Resource Graph sku.tier field.
  • Monitor metrics: both DiskDataReadOps and DiskDataWriteOps must be populated under uid:metricName. A missing series is a data gap (not idle) and the rule must not fire.
  • Observed peak IOPS = readMetric.Maximum + writeMetric.Maximum. The sum overstates the true peak (the per-series maxes may not co-occur), which is the safe direction, biasing against flagging. both raw metric series are attached to the recommendation with a zero-floor gte comparator so the drawer chart shows the 30-day peak relative to a zero baseline; the description carries the utilisation ratio context.

Why the ceiling sits at 20% of provisioned IOPS

Terminal window
the rule fires when all gates align: SKU is Premium_LRS AND provisioned ≥ 500 IOPS AND both metric series present AND observedPeak / provisioned < azurePremiumIOPSUnderuseCeiling = 0.20 AND monthly cost > 0 AND an authoritative rate delta exists (both current and next-smaller P-tier rates present, dst < src, derived savings > 0). When the rate delta is missing or non-positive the rule abstains instead of fabricating a fraction-of-cost estimate. The 20% ceiling leaves ≥60% headroom on the next-smaller tier after downgrade.

Stepping down one Premium tier safely

  1. Review the disk’s IOPS and throughput graphs in Azure Monitor to confirm the observed peak
  2. Snapshot the disk (Azure Portal → Disks → Create snapshot)
  3. Stop/deallocate the attached VM
  4. Azure Portal → Disks → Select → Size + performance → select the next-smaller Premium tier at the same size
  5. Start the VM and monitor latency / queue depth for 24h to validate the new tier

Disk read and write ops over 30 days

DiskDataReadOps + DiskDataWriteOps (Azure Monitor, 30d via azurePremiumIOPSDowngradeLookbackDays)

See it fire on your bill.

Connect an account read-only. The first findings land in minutes.

417 rule families across 353 resource types on 22 platforms. Every threshold, metric, and IAM action is documented on these pages before you grant anything.

417 rule families documented
353 resource types covered
read-only default access level
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·