Большой стол без строк? - PullRequest
       5

Большой стол без строк?

1 голос
/ 01 декабря 2009

У меня есть база данных Sql Server 2005, которая содержит много таблиц, занимающих большой объем пространства (в совокупности более 10 ГБ), и в этих таблицах нет строк. Я могу видеть пространство и количество строк с помощью щелчка правой кнопкой мыши, свойства (элементы пространства данных и количество строк).

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 01 декабря 2009

Журнал транзакций и файл данных не сжимаются при удалении данных, при условии, что вы будете использовать их снова. Вы можете использовать DBCC SHRINKFILE и / или DBCC SHRINKDATABASE, чтобы освободить место, если оно вам действительно нужно.

1 голос
/ 01 декабря 2009

Свободное место не удаляется из базы данных, так как записи удаляются. Вместо этого он остается там и используется позже при добавлении новых записей.

Вы можете уменьшить базу данных вручную или периодически устанавливать автоматическое сжатие.

Сжатие вручную:

  • С клавиатурой: из окна запроса используйте DBCC SHRINKDATABASE dbname.
  • С помощью мыши: в Management Studio щелкните правой кнопкой мыши базу данных и выберите Tasks-> Shrink-> Database.

Автоусадка:

  • С помощью клавиатуры: из окна запроса ALTER DATABASE dbname SET AUTO_SHRINK ON.
  • С помощью мыши: в Management Studio щелкните правой кнопкой мыши базу данных, выберите «Свойства», выберите «Параметры» и установите для параметра «Автоматическое сжатие» значение True.

Быстрый просмотр документации только говорит о том, что автоусадки происходят "периодически". Я не заметил никаких упоминаний о том, что это за период.

При сжатии базы данных по умолчанию удаляются только пустые страницы в конце файла. Поэтому, если в вашей базе данных есть большое количество пустых страниц, за которыми следует одна использованная страница, она не будет сильно уменьшаться. При сжатии с помощью графического интерфейса в диалоговом окне сжатия имеется опция «Реорганизовать файлы перед освобождением неиспользуемого пространства». Если этот флажок установлен, используемые страницы будут перемещены в начало файла перед усечением конечного пустого пространства, но это также займет больше времени.

0 голосов
/ 24 мая 2012

По BradC на https://serverfault.com/questions/89814/sql-server-huge-tables-with-no-rows

Перестройте все индексы в таблицах, включая кластерный индекс. От Книги онлайн :

Восстановление индекса падает и воссоздает индекс. Это удаляет фрагментация, восстанавливает дисковое пространство сжатие страниц на основе указанный или существующий коэффициент заполнения установка и изменение порядка строк индекса в смежных страницах.

Что-то вроде:

ALTER INDEX ALL ON [lc_db_user].[JMS_MESSAGES] REBUILD

DBCC SHRINKDATABASE или (более предпочтительно) DBCC SHRINKFILE будет что-то делать, только если пространство фактически было освобождено из самой таблицы. Также, пожалуйста, убедитесь, что вы знакомы с проблемами, связанными с сокращением файлов базы данных . Резюме: НИКОГДА не используйте автоматическое сжатие, сокращайте файлы только при необходимости и всегда выполняйте полный переиндекс для дефрагментации всех только что фрагментированных индексов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...