OneLake Storage Costs Explained: The Hidden $0.023/GB
By Jonathan Flach · Published 2026-06-20 · Reviewed 2026-06-20
One terabyte of data sitting in a Fabric lakehouse looks like a $23.55/month line on your Azure bill — $0.023 per GB × 1,024 GB. The real number is often higher, and the gap is invisible unless you know where to look. OneLake storage is decoupled from your F-SKU compute: your capacity charge covers CU usage, and storage lands as a separate pay-as-you-go meter that runs whether your capacity is active, paused, or throttled. Three mechanisms can silently multiply your logical data size into several times that much billed storage: soft-delete retention, geo-replication for disaster recovery, and mirroring overages that kick in the moment a capacity pauses.
This article grounds those mechanics in the published Microsoft Learn documentation, then delivers a worked duplication-cost example showing how a straightforward 1 TB lakehouse can expand to more than 3 TB billed, all at the same $0.023/GB rate. For the broader picture of how storage fits into total capacity spend, see the Microsoft Fabric pricing and capacity planning guide.
How OneLake storage billing works
OneLake storage is billed at a pay-as-you-go rate per GB — it does not consume Fabric Capacity Units (OneLake compute and storage consumption, Microsoft Learn, checked June 2026). Your Azure bill shows a separate "OneLake Storage" line distinct from your capacity meter. The rate Microsoft publishes for hot storage is approximately $0.023/GB-month (Microsoft Fabric pricing, Azure, checked June 2026).
Billing is pro-rated hourly — the meter ticks every hour, not as a lump sum at month end. Microsoft's published example shows the cumulative daily figure: storing 1 TB on day 1 adds roughly 33 GB/day of billable storage (1 TB ÷ 30 days ≈ 33 GB, where Microsoft uses decimal 1 TB = 1,000 GB for this calculation) — the daily display is a rollup of the hourly meter, and the charge decreases if you delete data mid-month (OneLake capacity consumption, Microsoft Learn, checked June 2026).
Four categories of data contribute to your storage meter, and three of them are easy to overlook:
- Active data — files and tables in lakehouses, warehouses, and other Fabric items that are live and queryable. This includes Delta table history files from past versions that accumulate until you run VACUUM.
- Soft-deleted data — files deleted but not yet permanently removed; they linger in OneLake's 7-day protection window.
- BCDR geo-replicated data — a full secondary copy of your OneLake content written to another Azure region when disaster recovery is enabled; billed at a separate BCDR storage tier rate.
- Delta table history files — old parquet versions retained for time-travel queries (default 7-day window); billed at the same rate as active data until you run VACUUM.
OneLake transactions (reads and writes) are not a separate charge the way ADLS Gen2 transactions are — they consume Fabric Capacity Units from your F-SKU instead. But the storage itself sits entirely outside the CU model.
The four hidden storage multipliers
1. Soft-delete retention
OneLake automatically protects files with a 7-day soft-delete window: when you delete a file, it is retained for seven days before permanent removal, recoverable via Azure Storage Explorer or the REST API (Recover deleted files in OneLake, Microsoft Learn, checked June 2026).
The billing rule is unambiguous: soft-deleted data is billed at the same rate as active data (Understand the metrics app storage page, Microsoft Learn, checked June 2026). A 500 GB table you drop on Monday continues billing at $0.023/GB until the following Monday when the files are permanently purged. Permanently deleting before the seven days stops the charge immediately.
Item-level soft-delete (workspace items like lakehouses, not just individual files) is a separate, preview-stage feature with a configurable 7–90 day retention window. When enabled, items deleted from a workspace continue to incur storage costs for the full retention period (Retention and recovery in Fabric, Microsoft Learn, checked June 2026).
2. BCDR geo-replication
Enabling Business Continuity and Disaster Recovery on a Fabric capacity causes OneLake to geo-replicate your data to a secondary Azure region (OneLake consumption — disaster recovery storage, Microsoft Learn, checked June 2026). That secondary copy is billed as BCDR Storage — a distinct, higher pricing tier than standard OneLake hot storage. Write operations also consume more CUs under BCDR: a standard hot write costs 1,626 CU seconds per 4 MB per 10,000 operations; the same write with BCDR enabled costs 3,056 CU seconds — nearly double (OneLake consumption, Microsoft Learn, checked June 2026).
The combined effect: geo-replication roughly doubles your storage bill for the data it covers and increases write CU consumption simultaneously.
3. Mirroring free quota suspended on pause
Database mirroring includes 1 free TB of replica storage per CU purchased. An F64 capacity therefore includes 64 free TB of mirroring storage, which is enough to replicate substantial databases at zero marginal storage cost. But the free quota applies only while the capacity is active. Per the official mirroring documentation:
"You pay for OneLake storage if you exceed the free mirroring storage limit or when the capacity is paused." (Mirroring overview, Microsoft Learn, checked June 2026)
Pausing an F64 to save compute costs doesn't pause the storage bill — it converts mirroring replica storage from free to standard $0.023/GB billing for however long the capacity sits paused. An organization with 20 TB of mirroring replicas on an F64, pausing the capacity for 8 hours nightly, would accrue additional storage charges during every pause window. The free-quota reinstatement only happens on capacity resume.
This interacts with the pause trap described in reducing Microsoft Fabric costs: pausing is not cost-neutral when you carry mirroring replicas or smoothed compute debt.
4. Delta table history and VACUUM debt
Delta tables (the default format for Fabric lakehouses) retain old file versions for time-travel queries — by default, 7 days of history files sit alongside the live table. These historical parquet files count as active data in OneLake and bill at full rate. Running VACUUM with a retention threshold purges them; skipping VACUUM lets ghost versions of every UPDATE and DELETE accumulate silently. On a table that overwrites 100 GB of data daily, 7 days of default history means up to 700 GB of stale parquet billed alongside the 100 GB you actually use (VACUUM Delta tables, Microsoft Learn, checked June 2026).
Worked example: how 1 TB logical becomes 3+ TB billed
The scenario: a team runs an F64 capacity with one primary lakehouse that holds 1 TB of active Delta data. They have BCDR enabled for compliance, they deleted a 200 GB table last week (7 days ago), they have 300 GB of Delta history from daily overwrites they haven't VACUUMed, and they carry 500 GB of mirroring replicas (well within the 64 TB free quota — but they pause the capacity for 8 hours every night).
All figures use $0.023/GB-month = $0.023/GB/month, as of June 2026 PAYG rates. BCDR storage uses an illustrative higher rate consistent with Microsoft's published BCDR tier (the exact BCDR storage $/GB varies by region; for this example we use $0.041/GB-month — see Microsoft Fabric pricing, Azure, checked June 2026).
| Storage category | GB | $/GB-mo | Monthly cost |
|---|---|---|---|
| Active Delta data (hot) | 1,024 | $0.023 | $23.55 |
| BCDR geo-replicated copy of active data | 1,024 | $0.041 | $41.98 |
| Soft-deleted table (200 GB, 7-day window, now purged but accrued for the full week) | 200 × 7/30 = ~47 GB-mo | $0.023 | $1.08 |
| Delta table history files (300 GB, not VACUUMed) | 300 | $0.023 | $6.90 |
| Mirroring replicas during pause hours (500 GB × 8 h/24 h = ~167 GB avg billed) | 167 | $0.023 | $3.84 |
| Total billed | ~2,562 GB effective | — | ~$77.35/month |
The 1 TB of actual business data that the team cares about generates a storage bill that is 3.3× as large as the $23.55 naive estimate. The BCDR geo-replicated copy alone nearly doubles the line. Delta history and mirroring pause-billing add roughly 20% more on top.
Three of these four multipliers are invisible in day-to-day operations. The Capacity Metrics app's Storage tab shows 30 days of storage data at workspace level: it surfaces current storage and billable storage (which includes soft-deleted data billed at the same rate as active data) and lets you filter by Storage type. The Deletion status column indicates whether a workspace itself is active or has been deleted — it is a workspace-level status field, not a per-file soft-delete tracker. The tab may not distinguish active data, Delta history files, and BCDR replicas as separate line items within a single workspace row — granular per-category breakdowns require the OneLake storage report (Understand the metrics app storage page, Microsoft Learn, checked June 2026). For per-item attribution and a breakdown that surfaces soft-deleted and hidden system data separately, use the OneLake storage report in Workspace Settings > OneLake > Storage report — it is the clearest native tool for diagnosing overruns.
Shortcuts: the right way to share data without paying twice
When multiple workspaces need the same dataset, the instinct is to copy it. A physical copy doubles the storage charge immediately — two separate GB counts, two separate $0.023/GB lines. A OneLake shortcut avoids this entirely.
A shortcut is a logical link — a pointer — to a path in another OneLake location or an external source like ADLS Gen2. It does not copy bytes (Unify data sources with OneLake shortcuts, Microsoft Learn, checked June 2026). All Fabric compute engines (Spark, SQL, Power BI) can query a shortcut as if the data were local; the data stays in one place, storage is billed once to the source capacity, and the consuming workspace's capacity is charged only for the read transactions it initiates (OneLake capacity consumption example, Microsoft Learn, checked June 2026).
The practical rule: never copy data between workspaces to share it. Create a shortcut instead. The only exception is when you need physical isolation for data residency or security — and then you should budget the doubled storage explicitly.
What to do
-
Run the OneLake storage report. In any workspace, go to Workspace Settings > OneLake > Storage report. It shows per-item usage including soft-deleted and hidden system data. Use it to find which items are generating ghost storage.
-
VACUUM your Delta tables. Set a retention threshold consistent with your time-travel needs (the default is 7 days). Dropping below 7 days requires disabling Delta's safety check (
spark.databricks.delta.retentionDurationCheck.enabled = false) — use with caution in production, as concurrent readers and recovery scenarios may still need the older files (VACUUM Delta tables, Microsoft Learn, checked June 2026). Run VACUUM on schedule; unvacuumed tables in high-churn lakehouses routinely carry 5–10× the active data in stale parquet files. -
Price BCDR before you enable it. Geo-replication is a compliance requirement for many organizations, but it is not free. Model the storage cost at the BCDR tier rate before enabling it on a capacity — particularly for large lakehouses and warehouses.
-
Pause mirroring replicas or budget the pause-billing. If you pause your capacity overnight to save compute, know that mirroring replicas that were free during active hours become billable at $0.023/GB during the pause window. Either keep the capacity active or scope the mirroring quota against the pause duration.
-
Use shortcuts, not copies. Wherever multiple workspaces need the same data, create a shortcut rather than a physical copy. The storage saving is immediate and permanent.
-
Monitor storage separately from compute. OneLake storage does not show in the Capacity Metrics app Compute tab — it has its own Storage tab, which keeps 30 days of storage data (compared to 14 days of compute detail). Set a calendar reminder to review the Storage tab monthly, since a growing soft-delete or Delta history problem compounds quietly. For full context on native monitoring limits, see Microsoft Fabric capacity monitoring.
The enemy this defeats: the attribution void in storage
The Microsoft Fabric cost optimization guide names the attribution void — the gap between what the bill charges and what you can trace back to a workload. Storage is one of the clearest instances: the Azure bill shows a single "OneLake Storage" line with no breakdown by workspace, item, or data category. You know you spent $300 on storage; you cannot easily tell whether it was live data, soft-deleted ghosts, Delta history, or BCDR replicas.
SpendWeave's position is direct: the OneLake storage meter is predictable if you model all four multipliers (BCDR, soft-delete, Delta history, mirroring-pause). The teams that get surprised are the ones who modeled only the active-data GB. The math is transparent — the storage rate and the BCDR tier are published. What's missing is the discipline to count all the data categories, not just the logical table sizes.
If you want these teardowns in your inbox monthly — real capacity bills, dissected line by line — subscribe to the SpendWeave Fabric cost teardowns on the blog index. For the full compute-side picture alongside storage, start with the F-SKU pricing and capacity planning guide.
Frequently asked questions
How much does OneLake storage cost per GB? OneLake hot storage is approximately $0.023 per GB per month as of June 2026, billed pay-as-you-go separately from your Fabric compute charge. It does not consume Capacity Units. When disaster recovery (BCDR) is enabled, geo-replicated data is billed at a higher BCDR storage rate. Soft-deleted files accrue storage at the same $0.023/GB rate for up to 7 days before permanent removal.
Is OneLake storage included in the F-SKU price? No — OneLake storage is a separate pay-as-you-go line on your Azure bill. Your F-SKU covers compute (CUs). Storage is charged per GB regardless of which F-SKU you run. The only partial exception is mirroring: Fabric includes 1 free TB of mirroring replica storage per CU purchased (e.g., 64 free TB on an F64), but only while the capacity is active. When the capacity is paused, that free quota does not apply and mirroring storage is billed at the standard $0.023/GB rate.
Does enabling BCDR on a Fabric capacity cost more for storage? Yes. When you enable Business Continuity and Disaster Recovery (BCDR) for a capacity, OneLake geo-replicates your data to a secondary region. That geo-replicated copy is billed as "BCDR Storage" at a distinct, higher pricing tier — plus BCDR write operations consume roughly double the CUs of standard writes. Check the Azure pricing page for the current BCDR storage rate in your region (checked June 2026, Microsoft Learn).
What is OneLake soft delete and does it cost money? OneLake automatically retains deleted files for 7 days before permanent removal. During that window, soft-deleted data is billed at the same rate as active data ($0.023/GB-month). Permanently deleting items before the retention period expires stops the charge immediately.
How do shortcuts help avoid duplicate OneLake storage costs? A OneLake shortcut is a logical link to data in another OneLake location or external source. It does not copy the underlying bytes. If two workspaces both need the same dataset, creating a shortcut in the second workspace means both read from one physical copy — storage is billed once, not twice.
Researched with AI assistance, written and fact-checked by Jonathan Flach, verified against Microsoft Learn.