Уменьшить базу данных в SQL Server

У меня есть база данных, которая почти заполнена, и у нас есть несколько вариантов решения этой проблемы:

  1. мы можем увеличить размер файла БД
  2. уменьшить базу данных

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


person bobtheguy    schedule 23.09.2015    source источник
comment
В большинстве случаев вам потребуется увеличить размер файла данных. Сокращение файла данных может привести ко всем видам неприятностей. Об этом есть несколько статей, включая эту brentozar.com/archive/2009/08/   -  person Steve Mangiameli    schedule 24.09.2015
comment
так что я могу сделать реорганизацию или перестроить, чтобы освободить место?   -  person bobtheguy    schedule 24.09.2015


Ответы (2)


Итак, посмотрите, где у вас есть неиспользуемое пространство, какой файл, насколько велик, используйте следующий запрос....

Use DatabaseName
GO

Select name                                             AS [FileName]
     , size/128.0                                       AS [FileSize(MB)]
     , fileproperty(name, 'SpaceUsed')/128.0            AS [Space_Used(MB)]
     , (size - fileproperty(name, 'SpaceUsed')) /128.0  AS [FreeSpace(MB)] 
From dbo.sysfiles
GO

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

USE DatabaseName
GO
DBCC SHRINKFILE ('FileName', 10)   --<-- will shrink it to 10 MB
GO

Примечание

Если какое-либо неиспользуемое пространство было занято столбцом типа данных BLOB (текст, ntext, xml и т. д.), возможно, вы не сможете вернуть это неиспользуемое пространство, если не удалите и не создадите таблицу снова.

person M.Ali    schedule 23.09.2015
comment
Спасибо, но не могли бы вы сказать мне, какой столбец соответствует размеру базы данных, а какой — тому, сколько данных на самом деле находится в базе данных прямо сейчас? - person bobtheguy; 24.09.2015

Вы можете получить эту информацию несколькими способами. В SSMS вы можете щелкнуть правой кнопкой мыши базу данных, выбрать свойства и просмотреть файлы. Ваши файлы данных и журналов будут отображать «Исходное» значение, указывающее размер.

Вы можете щелкнуть правой кнопкой мыши БД, щелкнуть «Задачи и сжать», затем «Файлы» и файл данных должны отображаться по умолчанию. Это покажет вам ваш размер и свободное пространство.

Вы также можете запустить скрипт, показывающий всю информацию о размере и расположении ваших баз данных. Есть несколько из них, которые вы можете найти с помощью быстрого поиска Google.

Кроме того, есть несколько встроенных SP, которые могут предоставить вам эту информацию, как описано здесь В частности, четвертый запрос показывает объем свободного места.

person Steve Mangiameli    schedule 23.09.2015
comment
Следите за sp_msforeachdb в предлагаемом решении, я сам с этим не сталкивался, но sp_msforeachdb имеет дурную привычку пропускать базы данных. - person M.Ali; 24.09.2015
comment
Я выполнил запрос, и этот вывод говорит мне, что SizeGB - это фактический размер данных, а SizeMB - это размер базы данных, который включает некоторое неорганизованное пространство - person bobtheguy; 24.09.2015
comment
Я удалил эту ссылку @M.Ali, так как пропустил ее, но вы абсолютно правы. - person Steve Mangiameli; 24.09.2015
comment
Но любая информация о размере, которую я получил из этого запроса, касается только размера базы данных, где я могу найти запрос, чтобы увидеть, сколько данных на самом деле находится в файле? - person bobtheguy; 24.09.2015
comment
Четвертый запрос — это то, что вы ищете. Отредактировал ответ. - person Steve Mangiameli; 24.09.2015