Автоматическое сжатие базы данных
Если параметр базы данных AUTO_SHRINK установлен в значение ON, компонент Database Engine автоматически сжимает базы данных, в которых имеется свободное место. Этот параметр настраивается с помощью инструкции ALTER DATABASE. По умолчанию этот параметр имеет значение OFF. Компонент Database Engine периодически проверяет использование дискового пространства в каждой базе данных. Если параметру AUTO_SHRINK в базе данных присвоено значение ON, компонент Database Engine уменьшает размер файлов этой базы данных. Эта операция выполняется в фоновом режиме и не влияет на действия пользователя в базе данных.
Задание режима автоматического сжатия базы данных
ALTER DATABASE (Transact-SQL)
Сжатие базы данных вручную
Базу данных или ее файлы можно сжимать вручную с помощью инструкции DBCC SHRINKDATABASE или DBCC SHRINKFILE. Если инструкция DBCC SHRINKDATABASE или DBCC SHRINKFILE не может зарезервировать все заданное дисковое пространство в файле журнала, должно быть выдано информационное сообщение с указанием того действия, которое следует выполнить для обеспечения возможности освобождения дискового пространства. Дополнительные сведения о сжатии файлов журнала см. в разделе Сжатие журнала транзакций.
Операции DBCC SHRINKDATABASE и DBCC SHRINKFILE могут быть остановлены на любом этапе процесса, при этом вся выполненная работа сохраняется.
С помощью инструкции DBCC SHRINKDATABASE нельзя сжимать всю базу данных до размера, который меньше исходного. Поэтому, если база данных была создана с размером 10 МБ и потом увеличилась до 100 МБ, ее можно сжать только до 10 МБ, даже если все данные удалены из базы данных.
Однако с помощью инструкции DBCC SHRINKFILE можно сжимать отдельные файлы базы данных до размера, который меньше начального. При этом каждый файл следует сжимать по отдельности.
Примечание |
Нельзя сжимать базу данных или журнал транзакций при их резервировании. С другой стороны, нельзя создавать резервную копию базы данных или журнала транзакций при их сжатии. |
Сжатие базы данных
· DBCC SHRINKDATABASE (Transact-SQL)
· Как сжать базу данных (среда SQL Server Management Studio)
Сжатие файла данных или файла журнала
· DBCC SHRINKFILE (Transact-SQL)
· Как сжать файл (среда SQL Server Management Studio)
Сжатие журнала транзакций
Предусмотрены фиксированные крайние значения, до которых можно сжимать файл журнала транзакций. Размер виртуальных файлов журнала в журнале определяет пределы сжатия. Поэтому файл журнала нельзя сжать до размера, меньшего, чем размер виртуального файла журнала. Кроме того, уменьшать объем файла журнала можно только с шагом, равным размеру виртуального файла журнала. Например, файл журнала транзакций размером 1 ГБ может состоять из пяти виртуальных файлов журнала по 200 МБ каждый. При сжатии файла журнала транзакций неиспользуемые виртуальные файлы журнала удаляются, однако должно остаться как минимум два таких файла. Поскольку каждый виртуальный файл журнала в данном примере занимает 200 МБ, журнал транзакций можно сжать не менее чем до 400 МБ с шагом в 200 МБ. Чтобы иметь возможность сильнее сжать файл журнала транзакций, следует создать небольшой журнал и задать автоматический режим увеличения его размера вместо того, чтобы сразу создавать объемный файл журнала транзакций.
Команды DBCC SHRINKDATABASE или DBCC SHRINKFILE пытаются немедленно уменьшить размер файла журнала транзакций до требуемого (после округления). Перед сжатием следует выполнить резервирование файла журнала, чтобы уменьшить размер логического журнала, а также пометить как неактивные все виртуальные журналы, которые не содержат какой-либо части логического журнала. Дополнительные сведения см. в разделе Сжатие журнала транзакций.
Рекомендации
При планировании сжатия базы данных или файла следует учитывать следующие соображения.
· Наибольший эффект от операции сжатия достигается в том случае, если она выполняется после операции, создающей много неиспользуемого места (усечения или удаления таблицы).
· Большинству баз данных для выполнения обычных ежедневных операций требуется некоторый объем свободного места. Если сжатие базы данных производится регулярно, но она снова увеличивается в размерах, это означает, что освобожденное при сжатии место требуется для регулярных операций. В таких случаях повторное сжатие базы данных бессмысленно.
· Операция сжатия базы данных не избавляет от фрагментации индексов, а даже наоборот, обычно еще более увеличивает ее. Например, не следует сжимать базу данных или файл после перестройки индексов. Это еще одна причина отказаться от повторного сжатия базы данных.
· Не следует устанавливать параметр базы данных AUTO_SHRINK в значение ON без достаточных на то оснований.