Dataverse Storage and Capacity: Cutting Cost Without Losing Data Users Need

A technical guide for the environment that has run out of capacity: which bucket is full, what to delete safely, what never to delete, and the structural fixes that keep history available.

When Dataverse capacity is full, check which bucket is over: database, file or log, per environment and per table, on the capacity page of the Power Platform admin center. The usual offenders, in order, are plug-in trace logs, completed system jobs, email and note attachments, and audit history. Turn plug-in tracing off "All" and bulk-delete old traces, bulk-delete succeeded and canceled system jobs, move attachments out of the database, and delete old audit logs only after exporting them. Never bulk-delete jobs still waiting or in progress, records under legal hold, or anything without a verified export. Then fix it structurally: SharePoint or blob storage for attachments, an audit retention policy, and long-term archive, with your DPO involved.

Which Dataverse capacity bucket is actually full?

Start on the capacity page in the Power Platform admin center. Dataverse capacity is split into three buckets that are pooled across the tenant, and each fills for different reasons, so "storage is full" is not yet a diagnosis. Read the summary for the tenant, then the per-environment view, then open the environment using the most and read its per-table breakdown. That breakdown names the tables growing fastest, which is the list you work from.

Two checks before deleting anything. First, confirm which environment is responsible: sandbox and trial copies of production are often as large as production itself, and retiring an unused copy can recover more than any cleanup. Second, confirm the bucket for each large table in your own breakdown, because Microsoft has changed which system tables count toward which bucket over time.

BucketWhat usually fills itFirst place to look
DatabaseTable rows: business records, completed system jobs (AsyncOperation), workflow logs, import data, staging tables and activity records.Per-table breakdown for the environment, sorted by size.
FileBinary content: note attachments (annotation), email attachments, and file and image columns.Attachment and email tables, and which processes create them.
LogAudit history, and plug-in trace logs in the current capacity model.Audit settings per table and the plug-in trace log setting.

How do you clean up plug-in trace logs safely?

Plug-in trace logs are the most common surprise because a single setting controls them. In the environment settings, the plug-in trace log option is Off, Exception or All. "All" writes a trace row for every plug-in and custom workflow activity execution, and it is often left on after a debugging session. On a busy environment that setting alone can grow capacity faster than the business data.

Set it to Exception, or Off where nobody reads traces, then remove the history. Recent platform versions include system cleanup of older trace log rows, but do not assume it is running or sufficient in your environment: check the table size in the breakdown and the bulk deletion jobs list.

  • Change the setting first, otherwise the table refills while you delete.
  • Create a bulk deletion job on the Plug-in Trace Log table with a created-on filter older than the period your developers need for diagnosis.
  • Schedule it to recur, so the table stays small without anyone remembering.
  • If a developer is mid-investigation, export the traces they need before the job runs.

How do you bulk delete completed system jobs without breaking running processes?

The System Job table (AsyncOperation) records asynchronous plug-ins, classic workflows, bulk deletions, imports, rollup recalculations and other background work. Completed rows stay unless something removes them, so an environment with busy asynchronous logic accumulates them quickly. Microsoft provides bulk deletion job templates for completed system jobs in many environments, but check whether they exist, are active and cover the statuses you expect rather than relying on them.

Filter on status, not only on age. Delete jobs whose status is Completed with a status reason of Succeeded or Canceled. Keep Failed jobs until someone has reviewed why they failed, then delete them on a longer schedule. For classic workflows, the workflow option to automatically delete completed workflow jobs prevents the build-up at source.

  • Never include jobs that are Waiting, Waiting for Resources, In Progress, Pausing, Canceling or Suspended. Those are live work, and deleting a waiting workflow removes its pending steps.
  • Run the bulk deletion job outside peak hours, since it competes with other background work in the same environment.
  • Check the related workflow log rows as well, because they are held in a separate table and can be large.

Which other tables quietly consume database capacity?

After trace logs and system jobs, the per-table breakdown usually shows a longer tail. Each has its own safe route, and each is worth an owner so it does not return.

Table or sourceWhy it growsSafe route
Workflow logs and process sessionsStep-level history of classic workflows and dialogs.Bulk delete completed rows older than the diagnostic period, after the parent system jobs are handled.
Cloud flow run historyIn environments where flow run history is stored in Dataverse, every run adds rows.Review the run history retention setting against current Microsoft documentation, and reduce very chatty flows.
Import data and import logsThe import wizard keeps source rows and parse results for each import job.Delete completed import jobs once the loaded data has been verified.
Staging and duplicate tablesTables created for a migration or integration and never removed, or copies of the same data under two tables.Confirm nothing reads them, export them, then remove them in a solution release. Duplicate modelling is covered in our data model remediation guide.
Email activitiesServer-side synchronisation tracking every message, including newsletters and notifications.Tighten tracking rules first; delete only activities that are not linked to open cases, opportunities or regulated records.

What should you do about email and note attachments filling file capacity?

File capacity is almost always attachments: files on notes (the annotation table), attachments on email activities, and file or image columns. They matter to users, so this is where cleanup and structural change meet. Deleting old attachments outright is rarely acceptable; moving them out of Dataverse while keeping a link from the record usually is.

Find the sources first: which tables the notes hang off, which mailboxes and tracking rules bring email attachments in, and which processes generate documents such as quotes or signed forms. Then decide per source.

  • Stop the inflow: tighten email tracking so signatures, logos and automated notifications are not stored as attachments, and review flows that attach generated files to every record.
  • For new documents, use the SharePoint document management integration so files are stored in document libraries linked to the record rather than in notes.
  • For existing attachments, move the file content to SharePoint or Azure Blob storage and keep a link or a stub on the record. This needs a migration job, custom code or a tool, tested on a copy first.
  • Keep the email activity and its metadata even when the attachment is moved, so the timeline stays complete.
  • Verify a sample of moved files opens from the record before deleting the original content from Dataverse.

How do you reduce audit history without losing compliance evidence?

Audit history fills log capacity and is also evidence, so it is the one offender to handle with the people who own that evidence. Two separate decisions apply. Going forward, set the audit retention period for the environment and switch auditing off for tables and columns nobody needs to evidence, such as high-frequency integration fields. For the backlog, audit logs can be deleted from the admin center by age, by table or by type of log, but deletion cannot be undone.

Export before you delete wherever the history may be needed for a regulator, a dispute or an internal investigation, and store the export where it can be searched. What to audit, how to export it and how to prove who changed what are covered in our guide to Dynamics 365 audit trails for compliance. Where users simply need to read recent history on a form, a readable panel such as Solzet Easy Audit makes the retained audit data usable without keeping more of it.

What must never be bulk-deleted from Dataverse?

Bulk deletion is fast and permanent at record level. Environment backups exist, but restoring one restores an environment, not a handful of records, so an overly broad job is expensive to reverse. Keep this list next to every bulk deletion job you create.

  • System jobs that are waiting, in progress, suspended or otherwise not completed.
  • Records under a retention obligation or a legal hold, including activities and notes relating to a dispute, complaint or investigation.
  • Activities, notes and attachments linked to open cases, opportunities or contracts, without first checking the cascade behaviour of the relationship and what the delete removes with it.
  • Audit history in a regulated environment before it has been exported and the export checked.
  • Staging or integration tables before confirming no integration, report or flow still reads them.
  • Anything at all without a verified export or backup and a record of the job criteria, who approved it and when it ran.

What structural changes stop capacity filling up again?

Cleanup buys months; structure keeps the environment inside its entitlement. The aim is that users keep instant access to the history they use, and everything else moves to cheaper storage or leaves on a schedule.

ChangeWhat it doesWhat users keep
Attachments in SharePoint or Azure Blob storageFile content lives outside Dataverse, linked from the record.Documents open from the record as before.
Audit retention policyAudit logs older than the agreed period are removed automatically, after export where required.Recent change history on the form; older history in the export.
Recurring bulk deletion jobsTrace logs, completed system jobs, workflow logs and import data are removed on a schedule.Nothing they use day to day.
Long-term data retention for archiveDataverse long-term retention moves inactive records to read-only, lower-cost retained storage. Check current prerequisites and how retained data is viewed in Microsoft documentation.Retained records are queryable but not edited in place, so agree with users which history must stay live.
Environment lifecycleSandbox and trial copies have an owner and an expiry date.Test environments when they need them.

What do retention changes mean for data protection?

Changing how long data is kept is a data protection decision as well as a storage one. Deleting audit history, emails or attachments can remove evidence you are obliged to keep, and keeping them indefinitely, whether in Dataverse, SharePoint, blob storage or an archive, can conflict with retention limits for personal data. Moving data also changes where it is stored and who can access it, which may need recording.

Involve your data protection officer before changing retention settings, bulk deleting personal data or moving attachments to a new store, and record the decision. This page is technical guidance, not legal advice. How retention, erasure and data subject access requests work in Dynamics 365 is covered in our guide to GDPR retention, erasure and DSAR in Dynamics 365.

Is buying more capacity ever the right answer?

Sometimes. If the growth is genuine business data that users need live, and the cleanup and structural changes above are done, additional capacity is a normal cost of a growing system. What should not happen is buying add-on capacity to avoid a cleanup nobody has scheduled; how capacity fits into licence and renewal decisions is covered in our guide to managing Dynamics 365 licensing costs and renewals. A wider review of environments, governance and waste is part of our Dynamics 365 health check and technical audit.

We recommend the right solution - whether that's Microsoft Dynamics 365, Power Platform, or a custom-built CRM. Some businesses need the Microsoft ecosystem. Others need full control without licensing. We deliver both. Where storage and per-user licensing together no longer fit how the organisation works, a custom CRM on React, Node.js, PostgreSQL or .NET gives you direct control of storage and its cost.

How does Solzet help with Dataverse storage and capacity?

We start with the capacity breakdown per environment and table, and a list of the offenders with the space each one holds. Then the safe cleanup: trace log settings, bulk deletion jobs filtered by status and age, with every job criteria recorded and exports taken where evidence is needed. Then the structural work: attachment migration to SharePoint or blob storage, audit retention settings agreed with your DPO, recurring jobs and environment lifecycle, so capacity stays predictable.

Solzet delivers remotely from Yerevan, Armenia, with senior consultants and full-stack developers and 8+ years of Dynamics 365 Customer Engagement and Power Platform work, directly or white-label for Microsoft partners.

What do people ask us?

Why is our Dataverse storage capacity full?

Usually because of system data rather than business records. Check the capacity page in the Power Platform admin center for which bucket is full, database, file or log, then the per-table breakdown for the largest environment. The common offenders are plug-in trace logs left on "All", completed system jobs, email and note attachments, audit history, and sandbox copies of production that nobody retired.

How do we bulk delete plug-in trace logs in Dataverse?

First change the plug-in trace log setting from All to Exception or Off, so the table stops refilling. Then create a bulk deletion job on the Plug-in Trace Log table filtered to rows created before the period your developers need, and schedule it to recur. Export any traces needed for an open investigation before the job runs, and confirm the table size falls in the capacity breakdown.

Is it safe to delete system jobs (AsyncOperation) in Dataverse?

Completed ones, yes, if you filter correctly. Delete system jobs with status Completed and status reason Succeeded or Canceled, keep Failed jobs until someone has reviewed them, and never include jobs that are waiting, in progress or suspended, because those are live work. Run the job outside peak hours, and switch on automatic deletion of completed workflow jobs for classic workflows so they do not build up again.

Can we delete Dataverse audit logs to free up log capacity?

Yes, audit logs can be deleted from the admin center by age, table or log type, and a retention period can be set for the environment. Deletion is permanent, so export the history first wherever it may be needed for a regulator, dispute or investigation, and agree the retention period with your data protection officer. Switching off auditing for columns nobody needs to evidence reduces growth going forward.

How do we move Dynamics 365 attachments out of Dataverse file storage?

Stop the inflow first by tightening email tracking and use the SharePoint document management integration for new documents. For existing note and email attachments, a migration job, custom code or a tool moves the file content to SharePoint or Azure Blob storage and leaves a link on the record. Test on a copy, verify a sample opens from the record, then remove the original content from Dataverse.

What should never be bulk deleted from Dataverse?

System jobs that are not completed, records under a retention obligation or legal hold, activities and notes linked to open cases or opportunities without checking cascade behaviour, audit history in a regulated environment before export, and staging tables still read by an integration. Nothing should be bulk deleted without a verified export, because restoring an environment backup does not restore individual records.

Do we need our DPO involved in a Dataverse storage cleanup?

For anything touching personal data or evidence, yes. Changing audit retention, deleting emails and attachments, or moving files to a new store affects what you can prove, how long personal data is kept and where it is held. Involve the data protection officer before the change and record the decision. This is technical guidance, not legal advice.

Which solution is right for your business?

Tell us what you need. A senior consultant replies within one business day with a recommendation - Dynamics 365, Power Platform, or a custom-built CRM - not a sales script.