Сжатие файла
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
В этой статье описывается, как на SQL Server уменьшить данные или файл журнала с помощью SQL Server Management Studio или Transact-SQL.
Сжатие файлов данных позволяет освободить неиспользуемое пространство путем перемещения страниц данных с конца файла в незанятое пространство ближе к началу файла. Когда в конце файла образуется достаточно свободного места, страницы данных в конце файла могут быть освобождены и возвращены в файловую систему.
Ограничения
- Основной файл данных не может быть меньше размера первичного файла в
model
базе данных.
Рекомендации
Максимальный эффект от сжатия достигается после операции, при которой создается много неиспользуемого пространства в хранилище, например после объемной инструкции 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
В обозревателе объектовподключитесь к экземпляру компонента SQL Server Database Engine и разверните его.
Разверните узел Базы данных и щелкните правой кнопкой мыши базу данных, которую нужно сжать.
В меню наведите указатель мыши на пункт Задачи, затем на пункт Сжать и выберите команду Файлы.
База данных
Отображает имя выбранной базы данных.Тип файла
Выберите тип файла. Доступны следующие возможности: Данные и Журнал . Значение по умолчанию: Данные. Выбор другого типа файловой группы соответственным образом изменяет выбор в других полях.Файловая группа
Выберите файловую группу из списка файловых групп, связанных с выбранным ранее типом файлов . Выбор другой файловой группы соответственным образом изменяет выбор в других полях.Имя файла
Выберите файл из списка имеющихся файлов выбранной файловой группы и типа.Местонахождение
Отображает полный путь к текущему выбранному файлу. Путь не редактируется, но его можно скопировать в буфер обмена.Выделенное в данный момент место
Для файлов данных отображает выделенное в данный момент место. Для файлов журнала отображает текущее выделенное пространство, вычисленное из выходныхDBCC SQLPERF(LOGSPACE)
данных.Доступное свободное место
Для файлов данных отображает текущее свободное пространство, вычисленное из выходныхDBCC SHOWFILESTATS(fileid)
данных. В файлах журнала отображается текущее свободное место, вычисленное из выходныхDBCC SQLPERF(LOGSPACE)
данных.Освободить неиспользуемое место
Все неиспользуемое пространство, выделенное для файлов, освобождается для нужд операционной системы, а файл сжимается в последний выделенный экстент, тем самым размер файла уменьшается без перемещения данных. Не производится попыток перемещения строк на нераспределенные страницы.Реорганизовать страницы, перед тем как освободить неиспользуемое место
Эквивалентен выполнениюDBCC SHRINKFILE
задания целевого размера файла. При выборе этого параметра необходимо указать размер целевого файла в поле Сжать файл до .Сжать файл до
Определяет размер целевого файла для операции сжатия. Размер не может быть меньше текущего выделенного пространства или более общих экстентов, выделенных файлу. Ввод значения, превышающего минимальное или максимальное значение, будет возвращаться к минимальному или максимальному значению после изменения фокуса или при выборе любого из кнопок на панели инструментов.Очистить файл путем переноса данных в другие файлы той же файловой группы
Выполняется перенос всех данных из указанного файла. Этот параметр позволяет удалить файл при помощи инструкции ALTER DATABASE. Этот параметр эквивалентен выполнениюDBCC SHRINKFILE
с параметромEMPTYFILE
.EMPTYFILE
не поддерживается в База данных SQL Azure или гипермасштабировании База данных SQL Azure.Выберите тип файла и имя файла.
Дополнительно можно установить флажок Освободить неиспользуемое место .
Выбор этого параметра приводит к освобождению всего неиспользуемого пространства файла для ОС и уменьшению размера файла до последнего размещенного экстента. Это уменьшает размер файла без перемещения каких-либо данных.
Дополнительно можно установить флажок Реорганизовать файлы перед освобождением неиспользуемого места . При выборе этого режима необходимо указать значение Сжать файл до . По умолчанию этот флажок снят.
Выбор этого параметра приводит к освобождению всего неиспользуемого пространства файла для ОС и попытке перемещения строк в неразмещенные страницы.
При необходимости введите максимальный процент свободного пространства, которое должно остаться в базе данных после ее сжатия. Допустимы значения от 0 до 99. Этот параметр доступен только в том случае, если установлен флажок Реорганизовать файлы перед освобождением неиспользуемого места .
При необходимости установите флажок Очистить файл путем переноса данных в другие файлы той же файловой группы .
Выбор этого режима перемещает все данные из указанного файла в другие файлы данной файловой группы. Пустой файл удалить нельзя. Этот параметр совпадает
DBCC SHRINKFILE
с выполнением с параметром EMPTYFILE.Нажмите ОК.
Использование Transact-SQL
Сжатие файла данных или журнала с помощью Transact-SQL
Соединитесь с ядром СУБД .
На стандартной панели выберите пункт Создать запрос.
Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. В следующем примере для сжатия файла в базе данных до 7 МБ используется функция
DataFile1
DBCC SHRINKFILEUserDB
.
USE UserDB;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO
Связанный контент
- Рекомендации по настройке автоувеличения и автосжатия в SQL Server
- Файлы и файловые группы базы данных
- sys.databases (Transact-SQL)
- sys.database_files (Transact-SQL)
- FILE_ID (Transact-SQL)
- DBCC SHRINKDATABASE (Transact-SQL)
- DBCC SHRINKFILE (Transact-SQL)
- Удаление файлов данных или журнала из базы данных
- Сжатие базы данных