The metadata storage has exceeded the allocated limit.
1. Overview
The “Metadata storage exceeded limit” issue in SharePoint occurs when the cumulative metadata (site columns, content types, list/library schema, workflows, and custom features) surpasses Microsoft’s recommended or supported limit. This problem can prevent users from adding new fields, lists, or customizations, and may also degrade the performance of your SharePoint site.

2. Causes
Adding too many columns, especially indexed or lookup columns, to lists and libraries.
Creating excessive content types and custom site columns.
Over-customization with solutions, workflows, and site features.
Retaining unused lists, libraries, or columns that consume metadata.
Enabling version history logging and retaining too many historical versions in large lists or libraries.
3. Symptoms
Unable to create new columns, lists, or libraries.
Errors when saving changes to list/library schema.
Slow performance or frequent error messages during configuration.
“Metadata storage exceeded limit” warning appears in the admin or site interface.
4. Resolution Steps
A. Review and Clean Up Metadata
Review and remove unused columns from lists and libraries.
Delete unnecessary content types and custom site columns.
Remove old or unused lists, libraries, workflows, and features.
Consolidate similar lists/libraries to reduce complexity.
If site is too large, consider splitting into multiple site collections.
B. Manage Version History
-
Disable version history logging for large lists/libraries where versioning is not needed.
Share Point List > Table > List Setting > Version Settings > Change option "Create a version each time you edit an item in this list" from YES to NO
Or you can decrease the number of versions to lower if the log history version is needed
-
Clear old version history: Use PowerShell scripts to remove or retain only the latest 2-3 versions per item, freeing up metadata storage.
# Connect to SharePoint
$siteUrl = "https://indochina.sharepoint.com/sites/WindowsE_Contracts"
$listName = "<Table Name>"
Connect-PnPOnline -Url $siteUrl -UseWebLogin
# CAML query để chỉ lấy các item có ID >= 1000
$camlQuery = @"
<View Scope='RecursiveAll'>
<Query>
<Where>
<Geq>
<FieldRef Name='ID'/>
<Value Type='Counter'>1000</Value> // Can change the number of id to start clear history version log
</Geq>
</Where>
</Query>
<RowLimit Paged='TRUE'>1000</RowLimit>
<ViewFields>
<FieldRef Name='ID'/>
</ViewFields>
</View>
"@
$items = Get-PnPListItem -List $listName -Query $camlQuery -PageSize 1000
$batchSize = 50
$batchCount = 0
foreach ($item in $items) {
$id = $item.Id
$versions = Get-PnPProperty -ClientObject $item -Property Versions
if ($versions.Count -gt 1) {
for ($i = $versions.Count - 1; $i -ge 1; $i--) {
$versions[$i].DeleteObject()
}
$batchCount++
Write-Host "Cleaned versions for item ID $id"
}
if ($batchCount % $batchSize -eq 0 -and $batchCount -ne 0) {
Invoke-PnPQuery
Write-Host "Committed batch of $batchSize version deletions"
}
}
# Final commit
Invoke-PnPQuery
Write-Host "Version cleanup completed for items with ID >= 1000."