Как исключить индексы из резервных копий в SQL Server 2008

19

Наши ночные полные (и периодические дифференциальные) резервные копии становятся довольно большими, в основном из-за количества индексов в наших таблицах; примерно половина размера резервной копии состоит из индексов.

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

Есть ли способ, с помощью FileGroupsили каким-либо другим методом разделения файлов, исключить индексы из резервных копий?

Было бы хорошо, если бы это можно было распространить и на полнотекстовые каталоги.

Джаррод Диксон
источник

Ответы:

15

Если вы переключитесь в режим полного восстановления, вы можете сделать это с файловыми группами, но это действительно очень неуклюже. Вы оставляете данные в основной файловой группе и помещаете индексы в отдельную файловую группу (не по умолчанию, это ключ).

Затем вы разбиваете резервные копии так, что вы делаете резервные копии файловой группы первичного сервера каждую ночь, а резервные копии журнала транзакций - каждые X минут.

Когда происходит бедствие, вы восстанавливаете основную файловую группу самостоятельно. Данные внезапно появляются в сети, а индексы - нет. Однако, чтобы вернуться к нормальной жизни, вам нужно будет экспортировать эти данные в новую чистую базу данных и добавить оттуда индексы. Вы не можете полностью перевести базу данных в оперативный режим, не восстанавливая все файловые группы, и вы не можете сказать: «Мне больше не нужна эта другая файловая группа».

Для получения дополнительной информации о том, как это работает, посмотрите мой видеоурок по восстановлению файловой группы.

Брент Озар
источник
Хе-хе, я переместил некластеризованные индексы в их собственную файловую группу; Простая модель восстановления полностью остановила меня. Индексы были на самом деле больше, чем данные - как это дразнило меня! Ну что ж, возможно, какая-то третья сторона выпустит подсказку о волшебной пуле :)
Джаррод Диксон
1
И возможно, просто возможно, вы получите бесплатное лицензирование для этого. ;-)
Брент Озар
5

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

Когда вы восстанавливаете резервную копию в аварийной ситуации, вы не хотите ждать перестроения индексов, и вы будете страдать от отвратительной производительности, пока не сделаете это.

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

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

-Адам

Адам Дэвис
источник
1
«Вы не хотите ждать восстановления индексов», очень предположительно, ИМО
Джефф Этвуд
2
Да, но имейте в виду, я обобщаю здесь. Я не был убежден, что есть больше ситуаций, когда лучше отбросить индексы и перестроить, чем ситуации, когда лучше сделать резервную копию индексов и избежать перестроения. Другими словами, один случай, как правило, лучше, и, если это не требуется в конкретной ситуации, следует допустить ошибку при резервном копировании. При этом каждая ситуация отличается. Мне любопытно узнать, сколько времени занимает перестройка индексов SO, и насколько сильно страдает производительность сайта, пока он не будет готов (при условии, что во время перестроения он работал).
Адам Дэвис
Долгосрочное архивное резервное копирование - это особый вариант использования, который я сейчас рассматриваю и который привел меня к этому вопросу. У меня есть проект, который завершен, и я больше не хочу, чтобы база данных была в сети, но мне также не нужно загромождать наш сетевой диск большим файлом резервной копии, чем это необходимо. Я не хочу терять определения индексов, но не возражаю против их перестроения, если мне когда-нибудь придется восстанавливать это снова.
Ричардталлент
3

Звучит так, как будто это не поддерживается. Из этой информации об ошибке :

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

Джон Галлоуэй
источник
Это не будет проблемой для полнотекстовых индексов, не так ли? Они, как правило, довольно большие.
Майкл Тепер
1

может быть сумасшедшая идея, но здесь идет.

  1. удалить ваши некластеризованные индексы, которые занимают много места
  2. сделать резервную копию
  3. пересоздать индексы, которые вы уронили

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

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

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

Рассматривали ли вы делать сжатые резервные копии ? это новая функция 2008 года, это может быть вариант для вас.

Ник Кавадиас
источник
Да, мы включили сжатие для резервных копий, но встроенное сжатие не так уж велико. На самом деле у нас есть несжатое резервное копирование на конец недели, а затем мы распаковываем его, чтобы наши разработчики могли его отключить; это примерно 1/3 размера, но это займет некоторое время, чтобы бежать!
Джаррод Диксон
Что касается времени простоя БД, можем ли мы жить без как serverfault.com, так и stackoverflow.com в максимально возможной степени? Я содрогаюсь от этой мысли :)
Джаррод Диксон
Я не проверял это сам, но подозревал так же. Это не очень настраивается. Если вы все еще рассматриваете сжатие как вариант, взгляните на SQL Lightspeed (дорого, но потрясающе, но цена очень договорная) и на RedGate SQL Backup. Очень настраиваемые и отличные результаты
Ник Кавадиас