Бөлісу құралы:


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

Область применения: 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 (Transact-SQL) для уменьшения размера файлов данных и журналов в UserDB базе данных, а также для обеспечения 10 свободного места в базе данных.

DBCC SHRINKDATABASE (UserDB, 10);
GO

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

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