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


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

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

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

В этом разделе

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

    Ограничения

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

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

  • Сжатие базы данных с помощью:

    Среда SQL Server Management Studio

    Transact-SQL

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

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

Ограничения

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

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

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

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

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

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

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

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

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

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

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

Разрешения

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

Значок стрелки, используемый со ссылкой «В начало»[В начало]

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

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

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

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

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

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

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

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

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

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

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

Значок стрелки, используемый со ссылкой «В начало»[В начало]

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

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

  1. Установите соединение с компонентом Компонент Database Engine.

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

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

DBCC SHRINKDATABASE (UserDB, 10);
GO

Значок стрелки, используемый со ссылкой «В начало»[В начало]

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

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

Значок стрелки, используемый со ссылкой «В начало»[В начало]

См. также

Справочник

sys.databases (Transact-SQL)

sys.database_files (Transact-SQL)

DBCC (Transact-SQL)

DBCC SHRINKFILE (Transact-SQL)

Основные понятия

Сжатие файла

Файлы и файловые группы базы данных