У меня есть база данных, которая недавно была уменьшена, и когда я запускаю sp_spaceused, я вижу, что у нее 500 МБ нераспределенного пространства. Я пытаюсь сохранить эту базу данных определенного размера (соблюдайте ограничения на размер MSDE для пользователей моих настольных компьютеров), и я не уверен, влияет ли нераспределенное пространство на общий размер базы данных. Есть ли способ удалить это нераспределенное пространство из базы данных?
Будьте очень осторожны, выполняя сжатие для файлов данных, это вызывает фрагментацию индекса из-за используемого алгоритма (я владел кодом в MS). Это сообщение в блоге, которое я написал, содержит пример сценария, который показывает, что я имею в виду. Автоматическая усадка - ВЫКЛЮЧИТЕ!. Хотя заголовок сообщения в блоге посвящен автоматическому сжатию, ручное сжатие файла данных использует тот же самый код в SQL Server и, следовательно, имеет те же проблемы.
Если вы используете только опцию TRUNCATEONLY, как говорит Кайл, вы не будете перемещать данные и не вызовете фрагментацию.
Если у вас есть индексы в базе данных, у вас есть два варианта:
Надеюсь это поможет!
Видеть DBCC SHRINKFILE
SqlACID прав и посмотрите конкретно на TRUNCATEONLY или target_size
Почему ты хочешь сжаться? Базы данных имеют тенденцию расти по мере того, как в них помещается все больше данных. Это в их природе. Нет ничего плохого в том, что в файле данных есть неиспользуемое пространство. Фактически, SQL требует некоторого свободного места в файле.
Сжатие вызывает массивную фрагментацию и просто приведет к повторному увеличению файла данных при следующем добавлении данных. Когда это произойдет, вся система замедлится по мере расширения файла (особенно, если у вас не включена мгновенная инициализация). Кроме того, повторяющееся сжатие и увеличение приведет к фрагментации на уровне файловой системы, которую трудно исправить.
можно захотеть сжаться, если мы увидим огромное нераспределенное пространство, скажем, 150 ГБ или около того. Я видел один случай, когда sp_spaceused сообщает, что высокий уровень нераспределен, но DBCC SHRINKFILE не помогает. Так необходимо или я должен сказать обязательно использовать сторону цели в этом сценарии?