ОС SQL/Windows освобождает неиспользуемое пространство

Недавно я сделал архивирование своих данных и выполнил следующее:

У меня была таблица базы данных, в которой было более 33 миллионов записей, многие из которых были дубликатами.

Я сделал резервную копию таблицы и вставил уникальные данные в новую таблицу, затем переименовал/поменял местами имена таблиц, это дало то, что мне было нужно.

Теперь, однако, у меня осталось два стола...

  • Table1 (хорошая/живая таблица) - 10 миллионов записей
  • Table1_Backup (резервная таблица) — 33 миллиона записей

После этого мой файл SQL mdf/data увеличился до 319,7 ГБ, а мой файл журнала увеличился до 182 ГБ.

Это заняло большую часть моего свободного места в ОС, и на моем диске D теперь мало места.

Мой вопрос: как только я буду доволен архивными данными, я собираюсь удалить таблицу _backup, просто оставив свою хорошую живую таблицу.

Но, насколько я понимаю, SQL не вернет мне никакого свободного места в ОС, как лучше всего освободить это пространство из файлов журнала / mdf, я много читал о сжатии db / журнала, но многие люди говорят, что это плохая практика, любой совет был бы замечательным...


person Matthew Stott    schedule 24.07.2019    source источник


Ответы (1)


TL;DR Не сжимайте базу данных. Всегда.

Но что, если вам действительно нужно его уменьшить?

Согласно статье, на которую ссылается эксперт по SQL Server Брант Озар, существуют обстоятельства, при которых сжатие вашей базы данных является законным вариантом:

  • Ваша база данных составляет 1 ТБ или больше
  • Вы удалили 50% данных
  • У вас есть 500 ГБ+ свободного места
  • Вам никогда не понадобится это пространство, потому что теперь вы регулярно удаляете и архивируете

Полный ответ:

Вы написали, что читали об этом. Надеюсь, вы сталкивались с такими сообщениями, как Брента Озара. Что плохого в сжатии баз данных с помощью DBCC SHRINKDATABASE? :

У вас высокая фрагментация, поэтому вы перестраиваете свои индексы.

Что оставляет много пустого места вокруг, поэтому вы уменьшаете свою базу данных.

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

Майк Уолш Не нажимайте эту кнопку сжатия базы данных в SQL Server! - где он объясняет то же самое:

Что происходит при сжатии базы данных?

Когда вы сжимаете базу данных, вы просите SQL Server удалить неиспользуемое пространство из файлов вашей базы данных. Процесс, который использует SQL, может быть некрасивым и приводить к фрагментации индекса. Эта фрагментация влияет на производительность в долгосрочной перспективе. Вы освободили это пространство и позволяете ОС делать с ним все, что нужно, так что вы, по крайней мере, получили то, о чем просили. Если у вас есть растущая база данных, это означает, что база данных будет расти снова. В зависимости от ваших настроек автоматического роста, этот рост, вероятно, будет больше, чем необходимо, и вы снова сократитесь. В лучшем случае это просто дополнительная работа (сжатие, увеличение/уменьшение), и результирующая фрагментация файла обрабатывается нормально. В худшем случае это приводит к фрагментации индекса, фрагментации файлов и потенциально может вызвать проблемы с производительностью во время сжатия.

и ответ Аарона Бертрана на лучшие практики и опыт SHRINKFILE на dba.StackExchange.com - где он в основном говорит, что вы можете игнорировать хорошие советы от умных, опытных людей и полагать, что ваш случай разные - но на свой страх и риск. Это его заключительный аргумент:

Гораздо дороже будет сжать файл до 4 ГБ, а затем принудительно увеличить его для размещения новых данных. Это похоже на стирку уже чистого полотенца, которое вы собираетесь использовать, чтобы вытереть беспорядок.

В заключение — вам действительно стоит обратить внимание на то, что пишут эксперты. Просто для ясности: я не считаю себя экспертом в этом вопросе.
Я хорошо разбираюсь в T-SQL со стороны разработчика, но у меня очень мало опыта со стороны администратора баз данных — я могу рассчитывать на одного сколько раз мне приходилось писать такие вещи, как планы обслуживания, миграции баз данных или заниматься любыми задачами системного администрирования, которые должен был бы выполнять администратор баз данных.
Однако все эти парни, которых я упомянул, являются ведущими администраторами баз данных: Брент Озар — MCM. (Microsoft Certified Master), Майк Уолш — 9-кратный MVP (с 2011 г.), а Аарон Бертран — 22-кратный MVP (с 1997 г.) — эти ребята действительно знают, о чем пишут.
Я бы взял бесплатный совет от любого из них в любой день недели и дважды в воскресенье.

Обновление — О файлах журналов:

Сокращение файлов журнала — это несколько иная история. Делать это на регулярной основе — плохая практика.
Размер файла журнала в основном определяется вашей стратегией резервного копирования и выбранной моделью восстановления.

Рекомендуемое чтение: - Если вы готовы, я бы посоветовал прочитать как его полный ответ, так и полный ответ Аарона Бертрана на тот же пост.

person Zohar Peled    schedule 24.07.2019
comment
Спасибо за этот обширный ответ, ценю его. Это также относится к сжатию файлов журнала? - person Matthew Stott; 24.07.2019