Dataverse Storage Costs Explained: The IT Manager's Optimization Playbook 2026
If your Microsoft invoice has grown noticeably heavier over the last 12 months without a corresponding spike in user headcount, Dataverse storage is almost certainly the culprit. As Power Platform adoption accelerates across mid-market and enterprise organisations, storage consumption quietly compounds — and most IT Managers only notice the damage at contract renewal time, when the bill has already doubled.
This playbook is built for IT Managers, Dynamics 365 Architects, and Finance stakeholders who want a structured, no-fluff approach to understanding exactly what they're paying for, auditing their current footprint in under 48 hours, and implementing governance that prevents the cycle from repeating. Let's get into it.
Understanding the Three Dataverse Storage Tiers — and What Actually Fills Them
Microsoft meters Dataverse storage across three distinct tiers, and confusing them is the single most common reason organisations misread their bills and make the wrong optimisation decisions.
1. Database Storage
Database storage is the most expensive tier and covers structured relational data stored in Dataverse tables. Every row in every standard or custom table consumes database storage. Common high-volume contributors include:
- Activity records — Emails, tasks, appointments, and phone calls synced via server-side sync. Organisations running Dynamics 365 Sales or Customer Service often accumulate millions of activity rows over 3–5 years without ever purging historical records.
- Audit log records — If auditing is enabled at the column level across multiple entities, the audit table alone can account for 20–40% of total database storage in mature environments.
- Duplicate or orphaned records — Failed data migrations, legacy integrations, and test environments promoted to production leave behind orphaned records that consume storage indefinitely.
- Plugin trace logs — Left enabled in production environments (a surprisingly common oversight), these logs grow at a rate proportional to transaction volume and are almost never manually purged.
2. File Storage
File storage covers binary data attached to Dataverse records — notes attachments, email attachments synced via server-side sync, and any files stored natively in file or image column types. This tier is cheaper per GB than database storage, but it scales unpredictably because end users rarely think about file size when attaching documents to CRM records.
The most common miscalculation here: organisations assume that because they use SharePoint for document management, their file storage is under control. In reality, if email attachments are being synced from Exchange into Dynamics 365, those attachments land in Dataverse file storage — not SharePoint — and accumulate silently.
3. Log Storage
Log storage is the cheapest tier and holds audit history data specifically. It's a separate bucket from database storage, introduced to give organisations a more cost-effective place to retain compliance-related audit trails. However, if your environment was provisioned before Microsoft separated log storage (or if your admin hasn't explicitly configured audit log retention policies), audit data may still be flowing into database storage at the higher rate.
Key miscalculation alert: Many organisations calculate their storage overage by looking at total consumption versus their included entitlement without accounting for tier-level pricing differences. A 50 GB overage in database storage costs significantly more than a 50 GB overage in file or log storage. Always audit by tier, not by aggregate.
The 48-Hour Storage Audit: Step-by-Step Methodology
You don't need a specialist consultant to get a clear picture of your Dataverse storage footprint. Here's a structured approach using tools you already have access to.
Hour 0–4: Baseline Assessment in Power Platform Admin Center
Navigate to admin.powerplatform.microsoft.com → Resources → Capacity. This view gives you your tenant-wide storage summary broken down by database, file, and log tiers. Critically, click through to the environment-level breakdown — the tenant summary is almost useless for optimisation purposes because it hides which environments are the actual offenders.
Export the environment capacity report to Excel and sort by database storage descending. Flag any non-production environment consuming more than 5 GB of database storage — these are almost always forgotten sandbox or UAT environments that were cloned from production and never cleaned up.
Hour 4–16: Deep Dive Using the Dataverse Storage Capacity Report
For environments flagged in the previous step, use the built-in Dataverse Analytics reports (Admin Center → Analytics → Dataverse) to identify table-level storage consumption. The Storage capacity by table view is your most important asset here.
Prioritise investigation of these tables if they appear in your top 10:
- ActivityPointerBase / EmailBase / ActivityMimeAttachmentBase — Email and activity data. Check the age distribution of records. If you're holding 5 years of email activity with no retention policy, you have an immediate opportunity.
- AuditBase — If this table is consuming more than 10 GB, your audit configuration needs immediate review.
- PluginTraceLogBase — Should be empty or near-empty in a properly governed production environment.
- AsyncOperationBase — System jobs table. Failed or completed async jobs that are never purged accumulate here.
Hour 16–36: Power BI Analysis for Trend Identification
Microsoft publishes a Power Platform Admin Center Power BI content pack that surfaces storage trend data over time. Connect it to your tenant and build a simple storage growth rate dashboard. What you're looking for is the inflection point — the month where storage growth rate accelerated. That inflection almost always correlates with a specific event: a new integration going live, server-side sync being enabled, or auditing being turned on globally without a corresponding retention policy.
// Example: FetchXML query to count audit records by entity
<fetch aggregate="true">
<entity name="audit">
<attribute name="auditid" alias="record_count" aggregate="count"/>
<attribute name="objecttypecode" alias="entity_name" groupby="true"/>
<attribute name="createdon" alias="created_month"
groupby="true" dategrouping="month"/>
<order alias="record_count" descending="true"/>
</entity>
</fetch>
Run this query via the Web API or XrmToolBox to identify which entities are generating the most audit records per month. This data is essential for making an informed decision about where to tighten audit column selection.
Hour 36–48: Orphaned Record and Attachment Inventory
Use XrmToolBox with the FetchXML Builder plugin to query for records that meet orphan criteria — for example, Account records with no related Contacts, Opportunities, or Activities created in the last 24 months. Build a report of candidate records for bulk deletion and get stakeholder sign-off before touching anything in production.
Cost Reduction Tactics with Realistic Savings Estimates
Tactic 1: Audit Log Retention Policy Configuration
Navigate to the Power Platform Admin Center → Settings → Audit and logs → Audit retention policy. Setting a 90-day retention policy on audit logs (appropriate for most commercial organisations that aren't subject to specific regulatory requirements demanding longer retention) can reduce log and database storage by 30–60% in environments where auditing has been running unchecked for 2+ years.
Realistic saving: For a mature Dynamics 365 environment with 5 years of unmanaged audit data, a retention policy cleanup can recover 15–40 GB of database storage — potentially saving £1,500–£4,000 annually at current overage pricing.
Tactic 2: Migrate Email Attachments to SharePoint
Enable SharePoint document management integration for entities where users frequently attach documents (Account, Opportunity, Case). Once configured, new attachments go to SharePoint rather than Dataverse file storage. For historical attachments already in Dataverse, use a custom migration flow (Power Automate + SharePoint connector) to move files and update note records to link to the SharePoint location.
Realistic saving: Organisations with active sales or service teams typically see 8–25 GB of file storage reclaimed, with ongoing prevention of 2–5 GB of new file storage per month.
Tactic 3: Azure Data Lake / Microsoft Fabric Long-Term Retention
For records that need to be retained for compliance but don't need to be actively queried in Dynamics 365, implement Azure Synapse Link for Dataverse (now part of the Microsoft Fabric ecosystem). Export historical data to a Fabric Lakehouse, then bulk-delete the source records from Dataverse. The data remains fully accessible for reporting and compliance purposes via Fabric, at storage costs that are a fraction of Dataverse database storage pricing.
This approach works particularly well for completed Cases, closed Opportunities older than 3 years, and historical activity records. Configure the Synapse Link export first, validate data completeness in Fabric, then execute the bulk delete — never the other way around.
Realistic saving: Large enterprises archiving 3+ years of historical records have reported 40–70 GB of database storage reduction, translating to £4,000–£7,000+ in annual overage cost avoidance.
Tactic 4: Bulk Delete Job Governance
Dataverse includes a native Bulk Delete capability (Settings → Data Management → Bulk Record Deletion) that is chronically underused. Establish recurring bulk delete jobs for:
- Plugin trace logs older than 7 days
- Completed system jobs (AsyncOperationBase) older than 30 days
- Duplicate detection jobs and results older than 30 days
- Cancelled or failed workflows older than 30 days
These jobs should run weekly on a schedule and require no manual intervention once configured. This alone can prevent 1–3 GB of database storage accumulation per month in active environments.
Governance Framework: Preventing Silent Cost Escalation
Tactical cleanup delivers one-time savings. Governance delivers sustained cost control. Here's the framework CRMONCE recommends for organisations scaling their Power Platform footprint.
Storage Threshold Alerts
Power Platform Admin Center allows you to configure email alerts when storage consumption crosses defined thresholds. Set alerts at 70%, 85%, and 95% of your total entitlement. The 70% alert should trigger a review, not a panic — giving you time to act before overage charges begin.
Environment Ownership Accountability
Every Dataverse environment should have a named Business Owner and a named Technical Owner recorded in your CMDB or equivalent. When a storage alert fires, the notification should go to both owners — not just the central IT team. Business ownership of storage costs changes behaviour: when a Sales Director understands that 8 years of unarchived email activity in the CRM has a direct cost implication, retention policy conversations happen much faster.
Quarterly Storage Reviews
Embed a storage review into your quarterly Power Platform governance cadence. The review should cover: top 5 tables by growth rate, any environments exceeding 10 GB that aren't production, status of bulk delete jobs, and audit retention compliance. This review should take no longer than 90 minutes with the right reporting in place.
New Environment Provisioning Checklist
Every new Dataverse environment should be provisioned with a standard configuration checklist that includes: audit retention policy set to 90 days, plugin trace logging set to exception-only, bulk delete jobs configured for system tables, and SharePoint integration enabled for document-heavy entities. Retrofitting governance is always harder than building it in from day one.
Your Next Steps
Dataverse storage costs are one of the most controllable line items in your Microsoft infrastructure spend — but only if you have visibility, a clear audit methodology, and governance structures that don't rely on someone remembering to check a dashboard once a year.
Start with the 48-hour audit this week. Export your environment capacity report, identify your top storage consumers by table, and calculate your current tier-level overage exposure. In most cases, a single afternoon of targeted cleanup — plugin trace logs, completed async jobs, and audit retention configuration — will deliver immediate, measurable results.
If your audit surfaces systemic issues that require architectural decisions — such as historical data archiving to Fabric or a large-scale attachment migration — CRMONCE's Dynamics 365 and Power Platform team in Hyderabad works with IT Managers across India, the UK, and the US to design and implement storage optimisation programmes that deliver sustainable cost reduction without disrupting live operations.
Ready to take control of your Dataverse storage spend? Get in touch with the CRMONCE team to schedule a no-obligation storage audit review.
Source references: Microsoft Learn — Dataverse Storage Capacity | Microsoft Learn — Free Up Storage Space in Dataverse