У меня есть база данных SQL Server (2008 R2 SP1), которая была около 15 гигабайт. Оказывается, обслуживание не проводилось какое-то время, поэтому я создал план обслуживания, чтобы перестроить все индексы, они были очень фрагментированы.
Работа завершена, фрагментация исчезла, но теперь база данных превышает 120 гигов! Я понимаю, что для перестройки потребовалось бы дополнительное пространство, но теперь, когда работа завершена, я думаю, что все это пространство будет свободным, но свободное пространство отображается только как 3 гигабайта, поэтому используется 117 гигабайт даже если задание перестроения индекса завершено.
Я очень сбит с толку и могу воспользоваться некоторыми рекомендациями, я вернул БД в разумный размер, для этого у нас нет места на диске.
Заранее спасибо!
Вот результаты обоих запросов:
log_reuse_wait_desc НИЧЕГО
name TotalSpaceInMB UsedSpaceInMB FreeSpaceInMB
LIVE_Data 152 123 28
LIVE_Log 18939 89 18849
LIVE_1_Data 114977 111289 3688
Третий файл - это файл .ndf, который показывает только 3688 в неиспользуемом пространстве, но 111289 используется для 15 гигабайт данных.
Перестройка индексов вызывает дополнительное свободное пространство в БД. Это естественный побочный продукт процесса переиндексации: сервер строит новую, мы надеемся, непрерывную версию индекса вместе с текущей версией, а затем удаляет текущую версию после завершения.
Сжатие после переиндексации бессмысленно!
Вы просто повторно фрагментируете индекс! Сжатие устраняет свободное пространство за счет перераспределения данных в БД.
Вот хорошая статья Пола Рэндала, который, работая в Microsoft, отвечал за
DBCC
код, включая сокращения, о том, почему вы не должны сокращаться.источник
Вы должны были использовать опцию перестроения
SORT_IN_TEMPDB=ON
.В вашем случае фактические файлы данных, в которых находятся рассматриваемые таблицы, использовались для сортировки индексов. Большая часть этого 120 ГБ пространства по-прежнему не используется и при необходимости будет заполнена данными страницы.
Вы можете увидеть статус использованного / свободного места с помощью этого запроса (взятого отсюда ):
Для сокращения определенного файла базы данных (данных или журнала), вы можете увидеть некоторую информацию здесь . Предупреждение перед этим, освобождение неиспользуемого пространства занимает довольно много времени для баз данных объемом более 100 Гб (зависит также от скорости хранения), поэтому просто дайте ему поработать.
источник
Без каких-либо других подробностей я подозреваю, что вам нужно сделать резервную копию журнала транзакций, прежде чем вы сможете восстановить его место.
Посмотрите, что
select name, log_reuse_wait_desc from sys.databases
говорит вам. Если в столбце log_reuse_wait_desc указано, чтоLOG_BACKUP
он не сможет освободить место, пока вы не сделаете резервную копию журнала транзакций.источник