FIX: Cannot reclaim unused space by using shrink operation in the table that contains a LOB column in SQL Server

Symptoms

Assume that you have a table that contains a large object (LOB) column in Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, or SQL Server 2014. When you update the LOB column with smaller size of LOB data and try to reclaim the unused space by using the following methods:
  • DBCC SHRINKDATABASE / DBCC SHRINKFILE
  • ALTER INDEX REORGANIZE WITH (LOB_COMPACTION = ON)
In this situation, the unused space cannot be reclaimed.

Workaround

To work around this issue, use the following workarounds:
  • Export all the rows to a new table and move the rows back. This reorganizes the LOB data and release the unused space.
  • Use DBCC SHRINKFILE with EMPTYFILE option to move all the data to a newly added data file and then remove old data file. This reorganizes the LOB data there by releasing the unused space.

More Information

The following example shows you the unused space by using TSQL command sp_spaceused 'table_name' before and after you update the LOB column with smaller size of LOB data:
Before you update:
name rows reserved data index_size unused
table_name1000 261072 KB 261056 KB 16 KB 0 KB
After you update:
name rows reserved data index_size unused
table_name1000 261072 KB 199672 KB 16 KB 61384 KB

Status

Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the "Applies to" section.
Properties

Article ID: 2967240 - Last Review: Sep 15, 2014 - Revision: 1

Feedback