сжимать файл базы данных одним выстрелом или поэтапно?

Мне нужно сжать базу данных ок. 1 ТБ уменьшился примерно до 700 ГБ (остается 200+ ГБ для роста без расширения). У меня есть скрипт, который будет зацикливать и сжимать базу данных с заданным шагом (например, 1 ГБ). Это очень полезно, если вам пришлось прервать в любое время, потому что прогресс не теряется, общая операция сжатия может длиться 4-5 дней. Вопрос в том, приведет ли сжатие файла базы данных к большей фрагментации или нет? Спасибо!!


person MariusD    schedule 10.05.2012    source источник
comment
Какую базу данных вы собираетесь сжать?..   -  person vyegorov    schedule 10.05.2012
comment
Это SQL Server 2008 R2, SP1.   -  person MariusD    schedule 10.05.2012
comment
Я думаю, что этот вопрос действительно принадлежит сайту DBA.   -  person Pondlife    schedule 10.05.2012
comment
Это правда, это вопрос администратора базы данных...   -  person MariusD    schedule 10.05.2012


Ответы (2)


(Это основано на MS SQL Server. Ваш пробег может отличаться от других СУБД.)

Если бы все остальное было равным, я подозреваю, что вы не подверглись бы большей фрагментации, ошибаясь, фрагментируя свой процесс сжатия. Когда файлы сжимаются, SQL, возможно, придется перемещать данные внутри, со страниц, которые будут удалены, на пустые страницы, которые не будут удалены. Кажется вероятным, что если бы блоки A, B и C были перемещены в X, Y и Z, а затем удалены из файла базы данных, то выполнение этого действия в три этапа приведет к такой же фрагментации, как и выполнение в три этапа.

Проблема, которую я вижу, заключается в том, что если вы сначала «уменьшите» блок A, и прежде чем вы начнете работать над блоком B, будет загружено больше данных, в результате чего база данных будет хранить данные в блоке D — разделе, который ранее был пустым и нацелены на возможную усадку? Хуже того, что, если для добавления новых данных потребуется воссоздать блок A, который затем придется снова сжимать?

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

person Philip Kelley    schedule 10.05.2012
comment
Это имеет смысл... Спасибо! - person MariusD; 10.05.2012
comment
Сейчас я запускаю тест на эквивалентной тестовой базе данных, и интересно видеть, что сжатие 100 МБ или 1 ГБ занимает почти одинаковое время... - person MariusD; 10.05.2012

Пожалуйста, обратитесь к ссылкам ниже для получения более подробной информации о том, «Почему вам НЕ СЛЕДУЕТ СЖАТАТЬ вашу базу данных или не нажимайте кнопку сжатия».

http://www.sqlskills.com/BLOGS/PAUL/post/Why-you-should-not-shrink-your-data-files.aspx http://sqlinthewild.co.za/index.php/2007/09/ 08/уменьшение баз данных/

ХТН, \К

person Kin Shah    schedule 10.05.2012
comment
Спасибо, я знаю об этом, это одна из тех предельных ситуаций, когда вы должны это сделать. Это база данных размером 1 ТБ, которая почти полностью заполнила раздел диска. У меня нет дополнительного места, чтобы сделать то, что предлагается в статье - перейти в новую файловую группу. - person MariusD; 10.05.2012