Skip to content
Cloud Efficiency Hub

Unmanaged Blob Versions and Soft-Deleted Data Accumulation

The short version

Blob versioning and blob soft delete are part of Microsoft's recommended data protection configuration, so they are often switched on for every storage account.

PointFive Research

Cloud cost research at PointFive

Azure service
Azure Blob Storage
Category
Storage
Reference
CER-0431
Type
Excessive Data Retention

Explanation

Why the waste happens and who it affects.

With versioning enabled, every write to a blob (Put Blob, Put Block List, Copy Blob, Set Blob Metadata) turns the current version into a previous version, and deleting a blob keeps all its previous versions. Previous versions are not removed when the soft-delete retention period expires; they persist until they are deleted explicitly or by a lifecycle management rule. With soft delete alone, every overwrite creates a hidden soft-deleted snapshot that is kept for the retention period.

None of this is visible in a normal blob listing, so capacity grows while the live data set looks unchanged. The effect is largest for data that is overwritten frequently, such as checkpoints, exports rewritten on a schedule, and application state files uploaded with Put Blob, where each version can hold a complete copy. Microsoft's Well-Architected guidance calls out versioning and soft delete as features that add capacity cost and recommends lifecycle rules for old versions and a separate account for frequently overwritten data.

Billing model

The pricing dimensions that drive this cost.

Previous versions and snapshots
Billed at the same rate as active data for as long as they exist
Unique-block billing
Without an explicitly set tier, you pay for unique blocks across a blob and its versions; a full Put Blob overwrite makes every block unique
Explicitly tiered version
A version or blob whose tier is set explicitly is billed at its full content length
Soft-deleted data
Billed at the same rate as live data until the retention period of 1 to 365 days expires

How to detect

5 checks to find it in your estate.

  • Run a blob inventory report with includeBlobVersions, includeSnapshots and includeDeleted set to true and the VersionId, IsCurrentVersion, Snapshot, Deleted and Content-Length fields, then sum capacity for previous versions, snapshots and deleted blobs against current versions
  • List storage accounts with blob versioning enabled (isVersioningEnabled on the blob service properties) that have no lifecycle management rule with a version or snapshot delete action
  • Review the soft delete retention period on each account; long retention on accounts with frequently overwritten data multiplies retained capacity
  • Watch for capacity growth in Storage insights or the account's Blob Capacity metric that outpaces growth in current data
  • Check whether applications still take manual blob snapshots on accounts where versioning is already enabled

How to fix

5 ways to remove the waste.

  • Add lifecycle management rules that delete previous versions (and snapshots) a set number of days after they were created, or move them to Cool, Cold or Archive before deletion; lifecycle delete operations are free, while tier changes are billed as Set Blob Tier operations
  • Move frequently overwritten data to a separate storage account with versioning and soft delete disabled, as Microsoft recommends
  • Set the soft delete retention period to what recovery actually needs; Microsoft suggests starting short, with seven days as the minimum recommended value
  • Stop taking manual snapshots of block blobs once versioning is enabled, since they add cost without extra protection
  • Prefer Put Block and Put Block List for partial updates of large blobs so fewer blocks become unique, and note that lifecycle deletes in soft-delete-enabled accounts leave data soft-deleted until the retention period ends

Documentation

Vendor references for pricing and configuration.