Поделиться через


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

В этом разделе описывается сжатие базы данных с помощью объекта в SQL Server 2014 с помощью SQL Server Management Studio или Transact-SQL.

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

Перед началом работы

Ограничения и условия

  • База данных не может быть меньше минимального размера базы данных. Минимальный размер — это размер, указанный при первоначальном создании базы данных или последний явный набор размеров с помощью операции изменения размера файла, например DBCC SHRINKFILE. Если, допустим, база данных была создана с размером 10 МБ и затем увеличилась до 100 МБ, ее можно сжать только до 10 МБ, даже если удалить из нее все данные.

  • Невозможно уменьшить базу данных во время резервного копирования базы данных. И наоборот, невозможно создать резервную копию базы данных во время операции сжатия базы данных.

  • DBCC SHRINKDATABASE завершится ошибкой при обнаружении индекса xVelocity, оптимизированного для памяти columnstore. Если работа будет выполнена успешно до того, как столкнется с индексом columnstore, то база данных может стать меньше. Чтобы завершить DBCC SHRINKDATABASE, отключите все колоночные индексы перед выполнением DBCC SHRINKDATABASE, а затем перестройте колоночные индексы.

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

  • Просмотр количества свободного (нераспределенного) пространства в базе данных. Дополнительные сведения см. в разделе Отображение данных и сведений о пространстве журнала для базы данных.

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

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

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

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

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

Безопасность

Разрешения

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

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

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

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

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

  3. Наведите указатель на задачи, наведите указатель на сжатие и щелкните "База данных".

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

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

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

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

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

  4. Нажмите кнопку ОК.

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

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

  1. Подключитесь к движку СУБД.

  2. На панели «Стандартная» нажмите Создать запрос.

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

DBCC SHRINKDATABASE (UserDB, 10);
GO

Дальнейшие действия. После сжатия базы данных

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

См. также

Сжатие файла
sys.databases (Transact-SQL)
sys.database_files (Transact-SQL)
DBCC (Transact-SQL)
DBCC SHRINKFILE (Transact-SQL)
Файлы и файловые группы базы данных