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

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

В этом подразделе содержатся инструкции по сжатию базы данных при помощи обозревателя объектов SQL Server 2017SQL Server 2017 в среде Среда SQL Server Management StudioSQL Server Management Studio или Transact-SQLTransact-SQL.This topic describes how to shrink a database by using Object in SQL Server 2017SQL Server 2017 by using Среда SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL.

Сжатие файлов данных позволяет освободить неиспользуемое пространство путем перемещения страниц данных с конца файла в незанятое пространство ближе к началу файла.Shrinking data files recovers space by moving pages of data from the end of the file to unoccupied space closer to the front of the file. Когда в конце файла образуется достаточно свободного места, страницы данных в конце файла могут быть освобождены и возвращены в файловую систему.When enough free space is created at the end of the file, data pages at end of the file can be deallocated and returned to the file system.

В этом разделеIn This Topic

Перед началомBefore You Begin

ОграниченияLimitations and Restrictions

  • Размер базы данных нельзя сделать меньше минимального размера базы данных.The database cannot be made smaller than the minimum size of the database. Минимальный размер — это первоначальный размер, заданный при создании базы данных, или последний размер, явно установленный операцией изменения размера файла (например, DBCC SHRINKFILE).The minimum size is the size specified when the database was originally created, or the last explicit size set by using a file-size-changing operation, such as DBCC SHRINKFILE. Если, допустим, база данных была создана с размером 10 МБ и затем увеличилась до 100 МБ, ее можно сжать только до 10 МБ, даже если удалить из нее все данные.For example, if a database was originally created with a size of 10 MB and grew to 100 MB, the smallest size the database could be reduced to is 10 MB, even if all the data in the database has been deleted.

  • Невозможно сжать базу данных во время создания ее резервной копии.You cannot shrink a database while the database is being backed up. И наоборот, нельзя создать резервную копию базы данных во время операции сжатия.Conversely, you cannot backup a database while a shrink operation on the database is in process.

  • Инструкция DBCC SHRINKDATABASE завершится с ошибкой при обнаружении оптимизированного для памяти xVelocity индекса columnstore.DBCC SHRINKDATABASE will fail when it encounters an xVelocity memory optimized columnstore index. Работа, выполненная до встречи с индексом columnstore, будет выполнена успешно, поэтому база данных может иметь меньший размер.Work completed before encountering the columnstore index will succeed so the database might be smaller. Чтобы выполнить инструкцию DBCC SHRINKDATABASE, отключите все индексы columnstore до ее запуска, а затем перестройте индексы columnstore.To complete DBCC SHRINKDATABASE, disable all columnstore indexes before executing DBCC SHRINKDATABASE, and then rebuild the columnstore indexes.

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

  • Просмотр количества свободного (нераспределенного) пространства в базе данных.To view the current amount of free (unallocated) space in the database. Дополнительные сведения см. в разделе Отображение данных и сведений о пространстве журнала для базы данных.For more information, see Display Data and Log Space Information for a Database

  • Обратите внимание на следующие сведения при планировании сжатия базы данных.Consider the following information when you plan to shrink a database:

    • Наибольший эффект от операции сжатия достигается при ее применении после операции, создающей много неиспользуемого пространства, например после усечения таблицы или удаления таблицы.A shrink operation is most effective after an operation that creates lots of unused space, such as a truncate table or a drop table operation.

    • Большинству баз данных требуется некоторое свободное пространство для выполнения обычных ежедневных операций.Most databases require some free space to be available for regular day-to-day operations. Если сжатие базы данных производится регулярно, но она снова увеличивается в размерах, это означает, что место, освобожденное при сжатии, необходимо для нормальной работы.If you shrink a database repeatedly and notice that the database size grows again, this indicates that the space that was shrunk is required for regular operations. В таких случаях повторное сжатие базы данных бессмысленно.In these cases, repeatedly shrinking the database is a wasted operation.

    • Операция сжатия не избавляет от фрагментации индексов в базе данных и обычно приводит к еще более сильной фрагментации.A shrink operation does not preserve the fragmentation state of indexes in the database, and generally increases fragmentation to a degree. Это еще одна причина, по которой не стоит выполнять регулярное сжатие базы данных.This is another reason not to repeatedly shrink the database.

    • Не следует устанавливать параметр базы данных AUTO_SHRINK в значение ON без достаточных на то оснований.Unless you have a specific requirement, do not set the AUTO_SHRINK database option to ON.

безопасностьSecurity

PermissionsPermissions

Необходимо быть членом предопределенной роли сервера sysadmin или предопределенной роли базы данных db_owner .Requires membership in the sysadmin fixed server role or the db_owner fixed database role.

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

Сжатие базы данныхTo shrink a database

  1. В обозревателе объектовподключитесь к экземпляру компонента Компонент SQL Server Database EngineSQL Server Database Engineи разверните его.In Object Explorer, connect to an instance of the Компонент SQL Server Database EngineSQL Server Database Engine, and then expand that instance.

  2. Разверните узел Базы данныхи щелкните правой кнопкой мыши базу данных, которую нужно сжать.Expand Databases, and then right-click the database that you want to shrink.

  3. В меню наведите указатель на пункт Задачи, Сжатьи выберите команду База данных.Point to Tasks, point to Shrink, and then click Database.

    База данныхDatabase
    Отображает имя выбранной базы данных.Displays the name of the selected database.

    Выделенное в данный момент местоCurrent allocated space
    Отображает суммарное используемое и неиспользуемое пространство для выбранной базы данных.Displays the total used and unused space for the selected database.

    Доступное свободное местоAvailable free space
    Отображает суммарное свободное место для файлов журналов и данных в выбранной базе данных.Displays the sum of free space in the log and data files of the selected database.

    Реорганизовать файлы перед освобождением неиспользованного местаReorganize files before releasing unused space
    Установка данного флажка эквивалентна выполнению инструкции DBCC SHRINKDATABASE с заданием целевого процентного параметра.Selecting this option is equivalent to executing DBCC SHRINKDATABASE specifying a target percent option. Снятие этого флажка равнозначно выполнению процедуры DBCC SHRINKDATABASE с параметром TRUNCATEONLY.Clearing this option is equivalent to executing DBCC SHRINKDATABASE with TRUNCATEONLY option. По умолчанию при открытии диалогового окна этот флажок не установлен.By default, this option is not selected when the dialog is opened. Если этот флажок установлен, то пользователь должен задать целевое процентное значение.If this option is selected, the user must specify a target percent option.

    Максимальное свободное пространство в файлах после сжатияMaximum free space in files after shrinking
    Введите максимальный процент свободного пространства, которое должно остаться в базе данных после ее сжатия.Enter the maximum percentage of free space to be left in the database files after the database has been shrunk. Допустимы значения от 0 до 99.Permissible values are between 0 and 99.

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

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

Сжатие базы данныхTo shrink a database

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

  2. На панели «Стандартная» нажмите Создать запрос.From the Standard bar, click New Query.

  3. Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить.Copy and paste the following example into the query window and click Execute. В этом примере инструкция DBCC SHRINKDATABASE используется для уменьшения размера данных и файлов журнала в базе данных UserDB и для выделения 10 процентов свободного пространства в этой базе данных.This example uses DBCC SHRINKDATABASE to decreases the size of the data and log files in the UserDB database and to allow for 10 percent free space in the database.

    DBCC SHRINKDATABASE (UserDB, 10);
    GO
    

Продолжение: после сжатия базы данныхFollow Up: After you shrink a database

Данные, перемещаемые в процессе сжатия файла, могут быть разбросаны по любым доступным местам в файле.Data that is moved to shrink a file can be scattered to any available location in the file. Это вызывает фрагментацию индекса и может увеличить время выполнения запросов, выполняющих поиск в диапазоне индекса.This causes index fragmentation and can slow the performance of queries that search a range of the index. Чтобы устранить фрагментацию, предусмотрите возможность перестроения индексов файла после сжатия.To eliminate the fragmentation, consider rebuilding the indexes on the file after shrinking.

См. также:See Also

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