у вас есть веские основания для беспокойства, поскольку сжатие БД в SQL Server часто «отстой». Пол Рэндал, глава Storage Engine в SQL 2005, заявил, что ShrinkDB написан очень плохо. Он найдет пустое пространство, взяв данные в самом конце, поместив их в самом начале и продолжая делать это, пока у них не будет свободного места в конце файлов БД. На этом этапе он может освободить пространство из SQL Server и вернуть его ОС. Вы эффективно обращаете свои файлы базы данных, таким образом, вы обычно увидите массивную фрагментацию. Вы можете прочитать о его взглядах в этом посте в блоге или на этом внутреннем видео MCM.
Как и во всем, вы действительно должны сначала проверить их в своей среде. Лучший способ сделать это - переместить данные в другую файловую группу. Вы можете перестроить индекс онлайн с помощью кластерного индекса, а затем переиндексировать в новой файловой группе. Затем вы можете отбросить старую и освободить место и почти не иметь фрагментации. Обратите внимание, что это займет около 120% дополнительного пространства во время работы. Проблема в том, что вам нужно даже дополнительное свободное пространство, которое, как кажется, у вас может не быть. Это особенность предприятия.
Если свободного места так много, то вам, возможно, придется прикусить пулю и медленно уменьшить объем БД за раз, чтобы избежать длительных процессов. Обратите внимание, что ваши данные будут сильно фрагментированы, и вы захотите снова все переиндексировать. Обратите внимание, что после переиндексации всего, вы немного увеличите используемое пространство и вернетесь к дополнительному свободному пространству. Смотрите совет Брента здесь .
Вопрос о том, сколько свободного места вам подходит, зависит от того, сколько вы можете позволить себе выполнять фрагментацию и рост файлов. При включенном IFI рост файла происходит практически мгновенно, но вы все равно получаете фрагментацию. Хорошее эмпирическое правило заключается в том, чтобы заранее выделить столько места, сколько вы считаете нужным, либо отслеживать рост и периодически корректировать порции, если это необходимо. Это подавляет физическую фрагментацию.
Кроме того, рост файла журнала намного важнее. Дополнительные файлы журнала могут вызвать фрагментацию VLF. Это делает ваше восстановление намного медленнее и может повлиять на контрольную точку / усечение. Вот некоторые риски производительности, которые вы берете на себя с фрагментированным журналом. Сделайте DBCC LOGINFO();
на каждой базе данных. Постарайтесь сохранить число около 50 для каждого Ким Триппа, но если вы видите сотни, у вас есть проблемы фрагментации, что означает, что ваши файлы журналов должны были расти для поддержки операций. Хороший способ узнать, каким должен быть ваш лог-файл для Пола Рэндала, - просто позволить ему расти в течение недели и переиндексировать. Это может быть хорошим моментом, возможно, вы можете добавить немного свободного места на всякий случай. Убедитесь, что ваши журналы не фрагментированы с помощью DBCC LOGINFO (); еще раз, и если они есть, значит, они сильно выросли. Сожмите и повторно разверните файл журнала, используяэтот метод .