Файл MDF в SQL Server слишком сильно растет - PullRequest
0 голосов
/ 12 марта 2019

Я работаю с SQL Server, и я заметил, что мой файл .mdf сильно увеличивается.

Я имею в виду, что в своих журналах я изменил модель восстановления на простую, поэтому я исправил ее ибревна растут не так сильно, как были.Но теперь я хотел бы сжать мой файл .mdf.Выполнение сжатия с использованием Management Studio для сжатия этого файла приведет к потере данных?

Как можно предотвратить рост этого файла?

1 Ответ

1 голос
/ 12 марта 2019

Файл данных увеличивается, потому что вы поместили туда данные. Если вы временно поместили туда данные (или запустили много обновлений или удалений), вы можете освободить свободное место в файле, перестроив и реорганизовав индексы. Вы можете определить самые большие индексы в терминах строк , используя:

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. Ожидайте, что любая операция сжатия увеличит фрагментацию и сделает производительность запросов хуже, и, если ваши циклы рабочей нагрузки, как я описал, ожидают, что вам придется часто повторять этот процесс. И если вы перестроите индексы, чтобы удалить фрагментацию и повысить производительность, эта операция снова увеличит размер файла. Это как дыра в ведре, Дорогая Лиза, Дорогая Лиза.

ИЛИ - просто оставьте файл большим и позвольте рабочей нагрузке повторно использовать пространство внутри него, вместо того, чтобы временно восстанавливать пространство.

Если вы не наткнетесь на еще не обнаруженную ошибку, сокращение не приведет к риску потери данных.

...