Проблема
Предположим, что у вас есть таблица, содержащая столбец большого объекта (LOB) в Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 или SQL Server 2014. При обновлении бизнес-столбца с данными бизнес-объекта меньшего размера и попытке освободить неиспользуемое пространство с помощью следующих методов:
- DBCC SHRINKDATABASE / DBCC SHRINKFILE
- ALTER INDEX REORGANIZE WITH (LOB_COMPACTION = ON)
В этой ситуации неиспользуемое пространство не может быть использовано.
Решение
Эта проблема была исправлена в следующем накопительном обновлении SQL Server.
Накопительный пакет обновления 2 для SQL Server 2012 с пакетом обновления 2 (SP2) /help/2983175
Накопительный пакет обновления 11 для SQL Server 2012 с пакетом обновления 1 (SP1) /help/2975396
Накопительный пакет обновления 13 для SQL Server 2008 R2 с пакетом обновления 2 (SP2) /help/2967540
Накопительный пакет обновления 2 для SQL Server 2014 года /en-us/help/2967546
Накопительный пакет обновления 17 для SQL Server 2008 с пакетом обновления 3 (SP3) /help/2958696
Сведения о накопительных обновлениях для SQL Server
Каждое новое накопительное обновление для SQL Server содержит все исправления и все исправления для системы безопасности, которые были включены в предыдущее накопительное обновление. Ознакомьтесь с последними накопительными обновлениями для SQL Server:
- Последнее накопительное обновление для SQL Server 2012 с пакетом обновления 2 (SP2)
- Последнее накопительное обновление для SQL Server 2012 с пакетом обновления 1 (SP1)
- Последнее накопительное обновление для SQL Server 2008 R2 с пакетом обновления 2 (SP2)
- Последнее накопительное обновление для SQL Server 2014 г.
- Последнее накопительное обновление для SQL Server 2008 с пакетом обновления 3 (SP3)
Временное решение
Чтобы обойти эту проблему, используйте следующие обходные пути:
- Экспортируйте все строки в новую таблицу и переместите строки обратно. Это реорганизует бизнес-данные и освобождает неиспользуемое пространство.
- Используйте параметр DBCC SHRINKFILE с параметром EMPTYFILE, чтобы переместить все данные в только что добавленный файл данных, а затем удалить старый файл данных. Это реорганизует бизнес-данные, освобождая неиспользуемое пространство.
Дополнительные сведения
В следующем примере показано неиспользуемое пространство с помощью команды TSQL sp_spaceused "table_name" до и после обновления столбца бизнес-данных меньшего размера:
Перед обновлением:
| имя | строки | Защищены | данные | index_size | Неиспользуемые |
|---|---|---|---|---|---|
| table_name | 1000 | 261072 КБ | 261056 КБ | 16 КБ | 0 КБ |
После обновления:
| имя | строки | Защищены | данные | index_size | Неиспользуемые |
|---|---|---|---|---|---|
| table_name | 1000 | 261072 КБ | 199672 КБ | 16 КБ | 61384 КБ |
Состояние
Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».