Этот вопрос задается здесь в различных формах, но вопрос сводится к:
Я знаю, что сокращение базы данных рискованно. В этом случае я удалил столько данных и больше никогда не буду их использовать.
- Как я могу уменьшить свою базу данных? Какие файлы мне сжимать?
- Какими должны быть мои соображения при этом?
- Должен ли я сделать что-нибудь после?
- Что делать, если это большая база данных? Могу ли я уменьшить его в меньших приращениях?
sql-server
shrink
Майк Уолш
источник
источник
Ответы:
Некоторые начальные предостережения:
Если вы читали о проблемах и рисках, и вам все еще нужно сделать это сокращение, поскольку вы освободили значительное количество места, надеюсь, остальная часть этого ответа поможет вам. Но учитывайте риски.
Есть два основных подхода, которые здесь рассматриваются два:
1.) Сжатие Да, сделать фактическое сжатие - рассмотрите возможность использования
DBCC SHRINKFILE
вместоDBCC SHRINKDATABASE
, у вас есть больше контроля над тем, что сокращается и как. Это наверняка вызовет некоторое снижение производительности - это большая операция, выполняющая много операций ввода-вывода. Вы можете потенциально уйти с повторными стягивается заданного размера , который получает все меньше.Это пример "A.)" в приведенной выше
DBCC SHRINKFILE
ссылке. В этом примере файл данных сокращается до целевого размера 7 МБ. Этот формат является хорошим способом многократного сжатия, как позволяет ваше окно простоя. Я бы сделал это при тестировании разработки, чтобы увидеть, как выглядит производительность и насколько низко / высоко вы можете пойти с приращением, и определить ожидаемые сроки производства. Это онлайн- операция - вы можете запустить ее с пользователями в системе, которые обращаются к сокращенной базе данных, но при этом почти гарантировано снижение производительности. Поэтому следите и наблюдайте за тем, что вы делаете с сервером, выбирайте окно простоя или период более легкой активности, в идеале.Всегда помните: - каждый раз, когда вы сжимаете, вы фрагментируете свои индексы и должны выполнять перестройку индекса, если вы собираетесь сокращать порции в течение длительного периода времени. Теперь вы несете эти расходы каждый раз, если не можете сделать все это в одном окне.
2.) Новая база данных - вы можете создать новую базу данных и перенести в нее данные. Вам нужно было бы написать сценарий для пустой базы данных и всех ее ключей, индексов, объектов, процедур, функций и т. Д., А затем перенести в нее данные. Вы можете написать сценарии для этого или использовать такой инструмент, как SQL Data Compare от Red Gate или других поставщиков с аналогичными инструментами. Это больше работы по настройке с вашей стороны, больше разработки и тестирования, и в зависимости от вашей среды может также выбить ваше окно простоя, но вариант, который нужно учитывать.
Когда я буду вынужден сжать базу данных Если бы это было мое окружение, я хотел бы посмотреть , чтобы оставить изрядное / здоровенное количество белого пространства в файл данных , потому что мне нравится быть на диск боров и как подготовиться к будущему / непредвиденному росту. Поэтому я был бы согласен вернуть пространство обратно, если бы мы просто удалили большую часть пространства, но я бы никогда не поверил тем, кто говорит «но оно никогда не вырастет снова», и все равно оставил бы некоторое пространство. Маршрут, по которому я бы, вероятно, пошел ( вздох) - это сжатый подход, если у меня были меньшие окна простоя и я не хотел брать на себя сложность создания пустой БД и переноса данных в нее. Поэтому я постепенно уменьшал его (в зависимости от того, сколько раз я думал, что мне нужно было основываться на моем тестировании в dev и желаемого размера. Постепенно выбирая меньший размер файла), а затем перестраивал индексы ... И тогда я ' никогда не говори никому, что я сжал свою базу данных ;-)
источник
DBCC SHRINKFILE
вами команды. Это зависит от вашего сервера, сколько файлов состоит из вашей базы данных. Простая база данных имеет один файл базы данных и один файл журнала транзакций.Мы все знаем, что не рекомендуется делать SHRINK регулярно в любом случае. Я стараюсь исключить все предупреждения и отказы от ответственности, которые вы, вероятно, знаете в любом случае. Сделайте резервную копию, и не делайте этого дома, если это возможно :)
Бонус: в среде репликации, если вы выполните это в базе данных издателя, это не приведет к сокращению баз данных подписчиков (что может иметь проблему с размером, поскольку они являются выпусками Express).
Наконец, мой скрипт переиндексации:
Единственная переменная в этом - это 14, которую можно получить с помощью команды select
DB_ID('YourDBName')
, и сценарий предполагает, что вас интересуют только таблицы в схеме dba. *.источник
Вы слышали все предупреждения о сокращении баз данных, и все они верны. Он будет фрагментировать ваши индексы и, в целом, испортит вашу базу данных и не должен выполняться в производственной системе.
Но я обычно делаю это еженедельно, когда восстанавливаю резервную копию на моей рабочей станции из-за свободного места на моем SSD-диске. Имейте в виду, я не писал этот сценарий, но нашел его несколько лет назад. В других базах данных [250 ГБ] я создал пакет служб SSIS, который перенесет нужные мне таблицы, а затем заново создаст индексы для этого очень свежего ощущения индекса.
источник
Приведенная ниже цитата взята непосредственно из Microsoft (относится к версиям 2008-2016) и дает указания относительно того, следует ли использовать
DBCC SHRINKFILE
команду, когда и когда .https://msdn.microsoft.com/en-us/library/ms189493.aspx
источник