Сжатие базы данных

Область применения: 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

Сжатие базы данных

  1. В обозреватель объектов подключитесь к экземпляру ядро СУБД SQL Server, а затем разверните этот экземпляр.

  2. Разверните узел Базы данныхи щелкните правой кнопкой мыши базу данных, которую нужно сжать.

  3. В меню наведите указатель мыши на пункт Задачи, затем на пункт Сжатьи выберите команду База данных.

    • База данных

      Отображает имя выбранной базы данных.

    • Выделенное в данный момент место

      Отображает суммарное используемое и неиспользуемое пространство для выбранной базы данных.

    • Доступное свободное место

      Отображает суммарное свободное место для файлов журналов и данных в выбранной базе данных.

    • Реорганизовать файлы перед освобождением неиспользованного места

      Установка данного флажка эквивалентна выполнению инструкции DBCC SHRINKDATABASE с заданием целевого процентного параметра. Снятие этого флажка равнозначно выполнению процедуры DBCC SHRINKDATABASE с параметром TRUNCATEONLY. По умолчанию этот параметр не выбирается при открытии диалогового окна. Если этот флажок установлен, то пользователь должен задать целевое процентное значение.

    • Максимальное свободное пространство в файлах после сжатия

      Введите максимальный процент свободного пространства, которое должно остаться в базе данных после ее сжатия. Допустимы значения от 0 до 99.

  4. Нажмите ОК.

Использование Transact-SQL

Сжатие базы данных

  1. Соединитесь с ядром СУБД .

  2. На стандартной панели выберите пункт Создать запрос.

  3. Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. В этом примере инструкция DBCC SHRINKDATABASE используется для уменьшения размера данных и файлов журнала в базе данных UserDB и для выделения 10 процентов свободного пространства в базе данных.

DBCC SHRINKDATABASE (UserDB, 10);
GO

После сжатия базы данных

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