Сжатие файла

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

В этой статье описывается, как на SQL Server уменьшить данные или файл журнала с помощью SQL Server Management Studio или Transact-SQL.

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

Ограничения

  • Основной файл данных не может быть меньше размера первичного файла в базе данных модели.

Рекомендации

  • Максимальный эффект от сжатия достигается после операции, при которой создается много неиспользуемого пространства в хранилище, например после объемной инструкции DELETE, усечения или удаления таблицы.

  • Большинству баз данных требуется некоторое свободное пространство для выполнения обычных ежедневных операций. Если сжатие файла базы данных производится регулярно, но размер базы данных продолжает расти, это означает, что для нормальной работы необходимо свободное пространство. В таких случаях повторное сжатие файла базы данных бессмысленно. События автоматического увеличения, необходимые для увеличения файла базы данных, снижают производительность.

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

  • Без достаточных на то оснований не следует устанавливать параметр базы данных AUTO_SHRINK равным ON.

Замечания

Выполняемые операции сжатия могут блокировать другие запросы к базе данных и могут заблокировать уже выполняющиеся запросы. В SQL Server 2022 (16.x) операции сжатия файлов имеют параметр WAIT_AT_LOW_PRIORITY. Эта функция является новым дополнительным параметром для DBCC SHRINKDATABASE и DBCC SHRINKFILE. Если новая операция сжатия в режиме WAIT_AT_LOW_PRIORITY не может получить необходимые блокировки из-за длительного выполнения запроса, операция сжатия в конечном итоге истекает через одну минуту и автоматически завершает работу, предотвращая блокировку других запросов. WAIT_AT_LOW_PRIORITY применяется к файлам данных (MDF и NDF). Он не применяется к файлам журнала транзакций. Дополнительные сведения см. в разделе DBCC SHRINKFILE.

Разрешения

Необходимо быть членом предопределенной роли сервера sysadmin или предопределенной роли базы данных db_owner .

Использование среды SQL Server Management Studio (SSMS)

Сжатие файла данных или журнала с помощью SSMS

  1. В обозревателе объектовподключитесь к экземпляру компонента SQL Server Database Engine и разверните его.

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

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

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

    Тип файла
    Выберите тип файла. Доступны следующие возможности: Данные и Журнал . Значение по умолчанию: Данные. Выбор другого типа файловой группы соответственным образом изменяет выбор в других полях.

    Файловая группа
    Выберите файловую группу из списка файловых групп, связанных с выбранным ранее типом файлов . Выбор другой файловой группы соответственным образом изменяет выбор в других полях.

    Имя файла
    Выберите файл из списка имеющихся файлов выбранной файловой группы и типа.

    Местонахождение
    Отображает полный путь к текущему выбранному файлу. Путь не редактируется, но его можно скопировать в буфер обмена.

    Выделенное в данный момент место
    Для файлов данных отображает выделенное в данный момент место. Для файлов журнала отображается выделенное в данный момент пространство, вычисленное на основании результата процедуры SQLPERF(LOGSPACE) модуля DBCC.

    Доступное свободное место
    Для файлов данных отображается имеющееся в данный момент доступное свободное место, вычисленное на основании результата процедуры SHOWFILESTATS(идентификатор_файла) модуля DBCC. Для файлов журнала отображается имеющиеся в данный момент доступное свободное место, вычисленное на основании результата процедуры SQLPERF(LOGSPACE) модуля DBCC.

    Освободить неиспользуемое место
    Все неиспользуемое пространство, выделенное для файлов, освобождается для нужд операционной системы, а файл сжимается в последний выделенный экстент, тем самым размер файла уменьшается без перемещения данных. Не производится попыток перемещения строк на нераспределенные страницы.

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

    Сжать файл до
    Определяет размер целевого файла для операции сжатия. Размер не может быть меньше текущего выделенного пространства или более общих экстентов, выделенных файлу. Если вводимое значение выходит за допустимые границы, оно будет преобразовано к минимальному или максимальному значению при изменении фокуса ввода или при нажатии на любую кнопку панели инструментов.

    Очистить файл путем переноса данных в другие файлы той же файловой группы
    Выполняется перенос всех данных из указанного файла. Этот параметр позволяет удалить файл при помощи инструкции ALTER DATABASE. Эта возможность эквивалентна выполнению процедуры SHRINKFILE модуля DBCC с параметром EMPTYFILE.

  4. Выберите тип файла и имя файла.

  5. Дополнительно можно установить флажок Освободить неиспользуемое место .

    Выбор этого параметра приводит к освобождению всего неиспользуемого пространства файла для ОС и уменьшению размера файла до последнего размещенного экстента. Это уменьшает размер файла без перемещения каких-либо данных.

  6. Дополнительно можно установить флажок Реорганизовать файлы перед освобождением неиспользуемого места . При выборе этого режима необходимо указать значение Сжать файл до . По умолчанию этот флажок снят.

    Выбор этого параметра приводит к освобождению всего неиспользуемого пространства файла для ОС и попытке перемещения строк в неразмещенные страницы.

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

  8. При необходимости установите флажок Очистить файл путем переноса данных в другие файлы той же файловой группы .

    Выбор этого режима перемещает все данные из указанного файла в другие файлы данной файловой группы. Пустой файл удалить нельзя. Этот режим эквивалентен выполнению процедуры DBCC SHRINKFILE с параметром EMPTYFILE.

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

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

Сжатие файла данных или журнала с помощью Transact-SQL

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

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

  3. Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. В следующем примере для сжатия файла в базе данных до 7 МБ используется функция DataFile1 DBCC SHRINKFILE UserDB .

USE UserDB;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO

См. также

Следующие шаги