Сжатие базы данных
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
В этой статье приводятся инструкции по сжатию базы данных в SQL Server с использованием обозревателя объектов в SQL Server Management Studio или Transact-SQL.
Сжатие файлов данных позволяет освободить неиспользуемое пространство путем перемещения страниц данных с конца файла в незанятое пространство ближе к началу файла. Когда в конце файла образуется достаточно свободного места, страницы данных в конце файла могут быть освобождены и возвращены в файловую систему.
ограничения
База данных не может быть меньше минимального размера базы данных. Минимальный размер — это первоначальный размер, указанный при создании базы данных, или последний размер, явно установленный операцией изменения размера файла, например,
DBCC SHRINKFILE
. Если, допустим, база данных была создана с размером 10 МБ и затем увеличилась до 100 МБ, ее можно сжать только до 10 МБ, даже если удалить из нее все данные.Невозможно сжать базу данных во время создания ее резервной копии. И наоборот, невозможно создать резервную копию базы данных во время операции сжатия.
Рекомендации
Просмотр количества свободного (нераспределенного) пространства в базе данных. Дополнительные сведения см. в разделе Отображение данных и сведений о пространстве журнала для базы данных.
Обратите внимание на следующие сведения при планировании сжатия базы данных.
Максимальный эффект от сжатия достигается после операции, при которой создается много неиспользуемого пространства в хранилище, например после объемной инструкции DELETE, усечения или удаления таблицы.
Большинству баз данных требуется некоторое свободное пространство для выполнения обычных ежедневных операций. Если сжатие базы данных производится регулярно, но она снова увеличивается в размерах, это означает, что для нормальной работы необходимо свободное пространство. В таких случаях повторное сжатие базы данных бессмысленно. События автоматического увеличения, необходимые для увеличения файлов базы данных, снижают производительность.
Операция сжатия не исключает фрагментацию индексов в базе данных и даже, наоборот, приводит к усилению фрагментации. Это еще одна причина, по которой не стоит выполнять регулярное сжатие базы данных.
Без достаточных на то оснований не следует устанавливать параметр базы данных AUTO_SHRINK равным ON.
Разрешения
Необходимо быть членом предопределенной роли сервера sysadmin или предопределенной роли базы данных db_owner .
Замечания
Выполняемые операции сжатия могут блокировать другие запросы к базе данных и могут заблокировать уже выполняющиеся запросы. В SQL Server 2022 (16.x) операции сжатия базы данных имеют WAIT_AT_LOW_PRIORITY параметр. Эта функция является новым дополнительным параметром для DBCC SHRINKDATABASE
и DBCC SHRINKFILE
. Если новая операция сжатия в режиме WAIT_AT_LOW_PRIORITY не может получить необходимые блокировки из-за длительного выполнения запроса, операция сжатия в конечном итоге истекает через одну минуту и автоматически завершает работу, предотвращая блокировку других запросов. Дополнительные сведения см. в разделе DBCC SHRINKDATABASE.
Сведения об управлении файлами и операциях сжатия, относящихся к База данных SQL Azure, см. в разделе "Управление пространством файлов для баз данных в База данных SQL Azure".
Использование SQL Server Management Studio
Область применения: SQL Server, Управляемый экземпляр SQL Azure
Сжатие базы данных
В обозреватель объектов подключитесь к экземпляру ядро СУБД SQL Server, а затем разверните этот экземпляр.
Разверните узел Базы данныхи щелкните правой кнопкой мыши базу данных, которую нужно сжать.
В меню наведите указатель мыши на пункт Задачи, затем на пункт Сжатьи выберите команду База данных.
База данных
Отображает имя выбранной базы данных.
Выделенное в данный момент место
Отображает суммарное используемое и неиспользуемое пространство для выбранной базы данных.
Доступное свободное место
Отображает суммарное свободное место для файлов журналов и данных в выбранной базе данных.
Реорганизовать файлы перед освобождением неиспользованного места
Установка данного флажка эквивалентна выполнению инструкции DBCC SHRINKDATABASE с заданием целевого процентного параметра. Снятие этого флажка равнозначно выполнению процедуры DBCC SHRINKDATABASE с параметром TRUNCATEONLY. По умолчанию этот параметр не выбирается при открытии диалогового окна. Если этот флажок установлен, то пользователь должен задать целевое процентное значение.
Максимальное свободное пространство в файлах после сжатия
Введите максимальный процент свободного пространства, которое должно остаться в базе данных после ее сжатия. Допустимы значения от 0 до 99.
Нажмите ОК.
Использование Transact-SQL
Сжатие базы данных
Соединитесь с ядром СУБД .
На стандартной панели выберите пункт Создать запрос.
Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. В этом примере инструкция DBCC SHRINKDATABASE используется для уменьшения размера данных и файлов журнала в базе данных
UserDB
и для выделения10
процентов свободного пространства в базе данных.
DBCC SHRINKDATABASE (UserDB, 10);
GO
После сжатия базы данных
Данные, перемещаемые в процессе сжатия файла, могут быть разбросаны по любым доступным местам в файле. Это вызывает фрагментацию индекса и может увеличить время выполнения запросов, выполняющих поиск в диапазоне индекса. Чтобы устранить фрагментацию, предусмотрите возможность перестроения индексов файла после сжатия. Дополнительные сведения см. в разделе Перестройка индекса.
Связанный контент
- Сжатие базы данных tempdb
- Рекомендации по настройке автоувеличения и автосжатия в SQL Server
- Файлы и файловые группы базы данных
- sys.databases (Transact-SQL)
- sys.database_files (Transact-SQL)
- DBCC SHRINKDATABASE (Transact-SQL)
- DBCC SHRINKFILE (Transact-SQL)
- Удаление файлов данных или журнала из базы данных
- Сжатие файла
- Управление файловым пространством для баз данных в базе данных Azure SQL Database