Skip to main content
rightsizing · azure

Azure Non-Prod Premium Disk Downgrade

resource types
1
rule IDs covered
1
severity
medium

What does ZopNight detect here?

Non-production Premium_LRS managed disks of 32 GB or larger are candidates for a Standard SSD tier downgrade at the same size. Savings use the real per-hour tier-rate delta times 730 hours; database-role disk names are vetoed, and the rule abstains when either tier rate is missing.

Signal and threshold

How ZopNight evaluates Azure Non-Prod Premium Disk Downgrade.
Field Value
Rule IDsRC-1386
Categoryrightsizing
Severitymedium
Metricnone — pure configuration read
Sourcedisk_tier_downgrade.go

Non-prod Premium_LRS disks that are not DB volumes

  • resource.InstanceType = Premium_LRS; resource.SizeGB ≥ azureDiskDowngradeMinSizeGB (P4 / ≥32GB).
  • POSITIVE non-prod signal via isNonProdResource (audit 2026-06-26 pattern A: gating on !isProdResource flagged production SQL-Server disks). Abstains unless non-prod is positively established.
  • DB-role name veto (matchesDBRoleDiskName, covering datadisk/logdisk/tempdb/sql/oracle/hana): never downgrade a Premium DB-role volume’s tier (I/O SLA risk).
  • per-size Premium + StandardSSD tier rates in pricing_cache for the region.

The tier rate delta priced over 730 hours

Real per-hour tier-rate delta: savings = (srcRate − dstRate) × 730 (managed disks bill per provisioned hour). The rule abstains (returns nil) when either tier rate is absent, dstRate ≥ srcRate, the result is ≤ 0, or savings ≥ cost (an at/above-cost delta signals a stale/anomalous rate, not a real saving). The pre-fix azureDiskDowngradeSavingsFraction × cost fabrication (it fired on every rec because the tier keys were never fetched) was removed, leaving no fabricated flat fraction (concrete-or-abstain, 2026-06-27). Description interpolates the rate-derived figure (resolves the old prose/compute “~40%” divergence).

Snapshot, deallocate, then switch the tier

  1. Confirm the disk is non-production;
  2. snapshot;
  3. stop/deallocate the VM;
  4. change to StandardSSD_LRS at the same size;
  5. validate performance

Read and write ops as an IOPS-starvation veto

DiskDataReadOps + DiskDataWriteOps (30d, declared) are not a firing gate (the rule fires on SKU + environment + size, distinct from RC-1394): when both series are present and the observed peak (sum of per-series maxima) exceeds the target StandardSSD tier’s IOPS ceiling for the size, the downgrade would IOPS-starve the workload => abstain (2026-07-02 safety veto for the non-guided hot resize); absent series keeps the environment-basis fire

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·