освободить место после перемещения индексов в файловую группу - PullRequest
0 голосов
/ 15 марта 2011

У меня очень большая база данных, и большую часть пространства занимает размер индекса. Я переместил несколько индексов в другую файловую группу (просто для экспериментов), но независимо от того, что я делаю, я не могу уменьшить размер MDF.

Я попытался сжать базу данных, сжать файлы, перестроить кластерный индекс. Что я могу сделать, чтобы освободить это место в МДФ? Я переместил индексы на 25 ГБ в другую файловую группу. Можно ли даже уменьшить мой mdf на те же 25 ГБ (или близко к нему)?

SQL Server 2008 Enterprise

Group   Total Space     Avail Space
PRIMARY 388485.000000   27126.3125000
Index   24778.375000    26.6250000

Параметры, которые я пытался сжать:

TSQL: 
1. DBCC SHRINKFILE (1, 10);
2. DBCC SHRINKFILE (1, TRUNCATE_ONLY);

UI: Shrink database: 
1. Without 'reorganize files...'
2. With 'reorganize files...'
2a. set max free space = 10%
2b. set max free space = 90%
2c. set max free space = 75%

UI: Shrink files: (type =data, group = primary, filename = db name)
1. Release unused space
2. reorganize pages... setting shrink file = 2GB (max it allows)
3. reorganize pages... setting shrink file = 361,360 (min allowed)

не пытался использовать опцию «Пустой файл», потому что это не похоже на то, что я хочу.

Ответы [ 4 ]

1 голос
/ 16 марта 2011

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

DECLARE @targetSize AS INT = 388000;
DECLARE @desiredFinalSize AS INT = 362000;
DECLARE @increment AS INT = 300;
DECLARE @sql AS VARCHAR(200);

WHILE @targetSize > @desiredFinalSize
BEGIN
    SET @sql = 'DBCC SHRINKFILE(''MyDataFileName'', ' + CAST(@targetSize AS VARCHAR(10)) + ');'
    SELECT @sql;
    EXEC(@sql);

    SET @targetSize = @targetSize - @increment; 
END  
1 голос
/ 15 марта 2011

Этот шаг выглядит неправильно

Пользовательский интерфейс: сжатие файлов: (тип = данные, группа = основной, имя файла = имя базы данных)
1. Освободите неиспользуемое пространство
2. реорганизовать страницы ... настройка сжатого файла = 2 ГБ (максимально разрешено)
3. реорганизовать страницы ... настройка сжатого файла = 361,360 (мин. Разрешено)

Из ваших вопросов вопрос правильный.

  1. Сокращенный файл
  2. Тип файла (Данные), группа (ОСНОВНОЕ) Имя ()
  3. Уменьшить действие = реорганизовать страницы (= переместить на передний план), Сократить файл *

Сокращенный файл вводится в МБ, поэтому значение 361 360 будет треть Терабайта. Самый простой способ установить его на минимум - ввести 0, нажать табуляцию -> он заменит минимально допустимое значение.

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

Это совершенно неправильный путь. РЕЗЕРВНЫЕ КОПИИ не не включают в себя свободное место, поэтому, если ваш основной файл mdf имеет 100 ГБ свободного места или 1 ТБ, если данные находятся на 200 ГБ, то есть размер файлов резервной копии. Для SQL Server 2008 вы можете использовать «со сжатием», что дает средний размер около 1/6.

1 голос
/ 15 марта 2011

ОК, попробуйте через интерфейс «Сжать базу данных» с максимальным свободным пространством «0%».

Настройка 10%, которую вы использовали до того, как «сработало», но свободное место на 27 гигабайт меньше 10% (это примерно 7% от вашей общей БД.

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

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

0 голосов
/ 15 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...