Чтобы максимизировать производительность БД, какие команды следует запускать после загрузки больших объемов данных в SQL Server 2008 через SSIS

11

Я написал пакет служб SSIS для загрузки тестовых данных в пустую базу данных. Некоторые из таблиц очень большие (~ 700 миллионов строк). После того, как пакет SSIS завершен, есть ли какие-либо команды, которые я должен выполнить (как администратор базы данных!), Чтобы максимизировать производительность базы данных?

Например, я выполнил, EXEC sp_updatestatsно он сообщил, что индексы не требуют обновления.

Есть ли список действий, которые необходимо выполнить после загрузки больших объемов данных, или SQL Server 2008 позаботится обо всем этом для вас?

Марк Робинсон
источник

Ответы:

8

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

  • Удалите все NC-индексы перед загрузкой.
  • После загрузки добавьте индексы NC для каждой таблицы в последовательности, т.е. не добавляйте индекс в TableA, затем в TableB, затем обратно в TableA. Это не влияет на фрагментацию, но может сократить время, необходимое для добавления индексов в очень большие наборы данных (уменьшает отток буферного пула).
  • Если вы можете вставить данные в таблицу в порядке кластерного индекса, оставьте кластерный индекс на месте. Если вы не можете, сбросьте данные в кучу и восстановите кластерный индекс после загрузки.

Вместо того, чтобы копировать и вставлять, я укажу вам очень полный список ссылок для оптимизации ETL @Marian, составленный в ответ на вопрос, который я задал на BCP . Многие из них будут в равной степени применимы к вашему сценарию.

Марк Стори-Смит
источник
2
Интересно, что по ссылке на видео из SQLCAT и SSIS их находка никогда не опускалась. Угадайте, это еще один случай "это зависит"
billinkc
2
@billinkc - это не вопрос для инкрементальных загрузок, а не для пустой базы данных? В любом случае, тестирование SQLCAT, как правило, включает в себя класс оборудования, редко встречающийся в типичных организациях.
Марк Стори-Смит
5

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

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

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

Майк Уолш
источник
4
Вдобавок к индексам, в одном из видеороликов служб SSIS из SQLCAT они также предлагают практическое правило, согласно которому при росте ваших данных> 100% и наличии единственного NCI удалите их и создайте заново. Если оно больше 10%, а NCI более 2, удаление и повторное создание приведут к лучшей производительности.
billinkc
2
Просто чтобы прояснить комментарий Билла - я думаю, что он говорит, что предложение состоит в том, чтобы время отбрасывалось - создавало значение «Индекс отбрасывания», «Загрузка ваших данных», а затем воссоздание индекса ». Вместо того, чтобы оставлять индексы во время загрузки и восстановить после. В любом случае, я так думаю :-) и да, замечательно, я +1 за комментарий.
Майк Уолш