У меня осталось только 2 ГБ, поэтому мне нужно удалить эту таблицу истории. Эта таблица сейчас пуста, но дисковое пространство базы данных не освобождено. И файл базы данных составляет 320 ГБ.
sql-server
sql-server-2012
truncate
Лукас Родригес Сена
источник
источник
Ответы:
Если вы ссылаетесь на фактическое потребление файла базы данных на томе, то SQL Server не обрабатывает это автоматически . То, что вы удалили данные из базы данных, не означает, что файлы базы данных будут сокращаться, чтобы соответствовать только существующим данным.
То , что вы бы искать, если есть для освобождения места на томе, будет усадка конкретного файла с
DBCC SHRINKFILE
. Стоит отметить несколько лучших практик, согласно этой документации:Также примечание:
Несомненно, есть несколько вещей, которые следует учитывать при выполнении этого, и я рекомендую вам взглянуть на сообщение в блоге Пола Рэндала о том, что происходит при выполнении этой операции.
Первым шагом, безусловно, будет проверка того, сколько места и свободного места вы действительно можете заменить, а также используемого места в файле (ах):
источник
Это нормальное поведение при усечении таблицы, которое включает в себя удаление более 128 экстентов, как в « Книгах онлайн»
Вам придется подождать и, конечно, вам придется вручную сжать файл, чтобы освободить место, также стоит упомянуть, что сжатие вызывает логическую фрагментацию, и ее следует избегать, если в этом нет необходимости. Вам придется как-то балансировать между сокращением и фрагментацией. Лучше спросить себя, решит ли сокращение на самом деле проблему, учитывая сценарий, в котором данные все равно будут расти.
Используйте запрос ниже, чтобы проверить, сколько свободного места в базе данных
источник
В дополнение к ответам Тома и Шэнки, если ваша база данных содержит данные LOB / BLOB, DBCC SHRINKFILE может не работать. Если это так, то у вас есть два варианта, в зависимости от того, можете ли вы перевести базу данных в автономный режим или нет. Если вы можете перевести базу данных в автономный режим, вам потребуется скопировать данные и скопировать их обратно, чтобы удалить пустое пространство. Вы можете сделать это одним из следующих способов:
Если вы не можете перевести базу данных в автономный режим, вы можете использовать команду DBCC SHRINKFILE с опцией EMPTYFILE .
Подробности для автономной копии: http://support.microsoft.com/kb/324432/en-us
Текущая информация для опции EMPTYFILE http://msdn.microsoft.com/en-us/library/ms189493(v=sql.105).aspx
источник