Skip to main content
rightsizing · azure

Premium SSD disks whose 30-day peak IOPS stays under 20% of what the tier provides

resource types
1
rule IDs covered
1
severity
medium

What does ZopNight detect here?

ZopNight flags a `Premium_LRS` disk provisioned for at least 500 IOPS when its combined read and write peak over 30 days stays below 20% of that figure. It proposes the next-smaller Premium performance tier, for example P30 at 5,000 IOPS down to P20 at 2,300, and prices the move from the two tier rates.

Signal and threshold

How ZopNight evaluates Premium SSD disks whose 30-day peak IOPS stays under 20% of what the tier provides.
Field Value
Rule IDsRC-1394
Categoryrightsizing
Severitymedium
MetricComposite Disk Read/Write Operations/sec (30-day peak)
Thresholdpeak IOPS < 20% of provisioned, provisioned >= 500
Evaluation window30d
SourceZopNight
Permissions usedMicrosoft.Compute/disks/read · Microsoft.Insights/Metrics/Read

What a Premium SSD performance tier buys, and what it costs

Each Premium SSD size comes with a baseline performance tier, and the tier sets the disk’s IOPS and throughput. The performance tiers page explains that you can raise a disk to a higher tier without changing its size, and that billing follows the tier: a 128 GiB P10 disk set to P50 is billed at the P50 rate until you set it back. The disk types page lists the base IOPS per tier, for example 500 for P10, 2,300 for P20, 5,000 for P30 and 7,500 for P40.

Tiers get raised for a migration, a load test or a busy season and are rarely lowered again. When a disk’s busiest minute in a month uses a small fraction of its tier, it is paying for headroom it does not use.

Comparing provisioned IOPS with the observed peak

Terminal window
az disk list \
--query "[?sku.name=='Premium_LRS'].{name:name, rg:resourceGroup, size:diskSizeGB, tier:tier, iops:diskIOPSReadWrite}" \
-o table
az monitor metrics list --resource <disk-resource-id> \
--metric "Composite Disk Read Operations/sec" "Composite Disk Write Operations/sec" \
--aggregation Maximum --interval PT1H --offset 30d

Add the read and write maxima and divide by the provisioned IOPS. Anything under 0.2 matches what this rule looks for.

The 20% peak test and other conditions

  1. The disk SKU is Premium_LRS; the tier arithmetic only works inside the Premium family.
  2. Provisioned IOPS is known and is at least 500, the P10 figure. Below that there is no smaller Premium tier with a meaningful step.
  3. Azure Monitor has both the read and the write series. A missing series is a data gap, not evidence of idleness.
  4. The observed peak, the read maximum plus the write maximum, is below 20% of provisioned IOPS. Adding two maxima that may not have happened at the same moment overstates the peak, which biases the rule against firing.
  5. The disk has a monthly cost and rates exist for both the current tier and the next-smaller one.

Using the peak rather than the average is deliberate. Premium disks are bought for burst headroom, so their averages are always low; a peak under 20% leaves plenty of room on the next tier down.

Disks that fall outside this check

Unlike Azure Non-Prod Premium Disk Downgrade, this rule does not care about environment. It can flag production disks, but only on measured usage. Disks below 500 provisioned IOPS belong to Azure Small Premium Disk Tier Optimization. If a tier rate is missing or the smaller tier is not cheaper, no finding is raised.

Saving from one tier step

Terminal window
monthly saving = disk monthly cost x (1 - next-smaller tier rate / current tier rate)

The target is expressed as the next tier’s IOPS ceiling, so the recommendation always names a concrete tier rather than a vague “smaller disk”.

Lowering the performance tier

  1. Re-check the IOPS and throughput graphs in Azure Monitor to confirm the peak.
  2. Take a snapshot of the disk before changing it.
  3. Set the lower tier, for example az disk update --resource-group my-rg --name my-disk --tier P20.
  4. Watch latency and queue depth for 24 hours.

See it fire on your bill.

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

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

472 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·