Файл данных увеличивается, потому что вы поместили туда данные. Если вы временно поместили туда данные (или запустили много обновлений или удалений), вы можете освободить свободное место в файле, перестроив и реорганизовав индексы. Вы можете определить самые большие индексы в терминах строк , используя:
SELECT TOP (10) OBJECT_SCHEMA_NAME(object_id),
OBJECT_NAME(object_id), rows = SUM(rows)
FROM sys.partitions
WHERE index_id IN (0,1)
AND OBJECTPROPERTY(object_id, 'IsMsShipped') = 0
GROUP BY object_id
ORDER BY rows DESC;
И с точки зрения размер с использованием:
SELECT TOP (10)
OBJECT_SCHEMA_NAME(i.object_id),
OBJECT_NAME(i.object_id),
i.name,
numpages = COUNT(p.allocated_page_page_id)
FROM sys.indexes AS i
CROSS APPLY sys.dm_db_database_page_allocations
(DB_ID(), i.object_id, i.index_id, NULL, 'LIMITED') AS p
GROUP BY i.object_id, i.name
ORDER BY numpages DESC;
Редко бывает, что вам захочется сжать базу данных. Файл MDF стал большим из-за вашей рабочей нагрузки. Если ваша рабочая нагрузка означает, что файл данных станет большим, а затем содержимое снова уменьшится, то уменьшение контейнера только для того, чтобы он снова увеличивался в течение следующего цикла рабочей нагрузки, ничего не даст. Что вы будете делать со свободным пространством, которое будет только временно временно?
Если вы решили уменьшить размер файла MDF, используйте DBCC SHRINKFILE
, а не пользовательский интерфейс или DBCC SHRINKDATABASE
. Ожидайте, что любая операция сжатия увеличит фрагментацию и сделает производительность запросов хуже, и, если ваши циклы рабочей нагрузки, как я описал, ожидают, что вам придется часто повторять этот процесс. И если вы перестроите индексы, чтобы удалить фрагментацию и повысить производительность, эта операция снова увеличит размер файла. Это как дыра в ведре, Дорогая Лиза, Дорогая Лиза.
ИЛИ - просто оставьте файл большим и позвольте рабочей нагрузке повторно использовать пространство внутри него, вместо того, чтобы временно восстанавливать пространство.
Если вы не наткнетесь на еще не обнаруженную ошибку, сокращение не приведет к риску потери данных.