Не удалось сжать базу данных - PullRequest
0 голосов
/ 13 февраля 2019

Я установил SQL Server 2017. Я создал test_db размером 512 МБ и пытаюсь сжать базу данных с помощью SQL-запроса:

dbcc shrinkfile(N'test_db', truncateonly)

Но я не вижу, что база данных сокращается.В случае, если я использую следующий запрос SQL:

dbcc shrinkfile(N'test_db', 1)

, файл уменьшается до 3 МБ.

Не могли бы вы объяснить разницу в поведении?Поскольку TRUNCATEONLY освобождает пустые места в конце файла, почему он не может сжать файл, когда файл данных пуст.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Если вы откроете документацию DBCC SHRINKFILE (Transact-SQL) , вы найдете

target_size

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

Поэтому, если вы хотите уменьшить размер ниже размера, указанного при создании файла, вам следует указать target_size даже для truncateonly:

dbcc shrinkfile(1, 1, truncateonly)
0 голосов
/ 13 февраля 2019

SQL Server запускает операцию сжатия базы данных с опцией NOTRUNCATE, чтобы получить немного свободного места в конце файла данных.Здесь ничего не происходит с физическим размером вашего файла в файловой системе Windows.На этом этапе также представлена ​​фрагментация индекса.

SQL Server запускает операцию сжатия базы данных с параметром TRUNCATEONLY и, наконец, удаляет нераспределенные экстенты в конце файла данных.Он также уменьшает физический размер файла в файловой системе Windows.

...