Я импортирую большой объем данных в пустую базу данных, и перед тем как начать, я отключил все неуникальные некластеризованные индексы, чтобы посмотреть, смогу ли я улучшить производительность импорта.
Теперь я хочу снова включить индексы, и мне интересно, есть ли что-нибудь, что я могу сделать, чтобы оптимизировать это.
Необходимо перестроить более 100 таблиц и почти 2000 индексов. База данных имеет размер 200 ГБ.
Ключевой раздел скрипта, который я запускаю, таков:
declare c_toggle_index cursor FORWARD_ONLY READ_ONLY for
select 'alter index ' + QUOTENAME(i.name) + ' on ' + o.name + ' rebuild'
from sys.indexes as i
Inner Join sys.objects o
On o.object_id = i.object_id
Where o.is_ms_shipped = 0
And i.index_id >= 1
and i.type > 1
and i.is_disabled = 1
Я рассмотрел установку ONLINE = OFF для оператора alter index, но поскольку индексы вначале отключены, я не был уверен, что этот параметр будет иметь какой-либо эффект. Я также рассмотрел возможность установки SORT_IN_TEMPDB = ON, но, поскольку файлы tempdb находятся на том же диске, что и файлы .mdf баз данных, я предположил, что это также не принесло пользы.
Во время выполнения сценария перестройки я заметил, что у меня много типов ожидания CXPACKET. Я не очень понимаю, почему это так или это проблема, которую я должен решить.
Последний момент, который может иметь значение: весь мой сервер в настоящее время неактивен, кроме импорта данных в базу данных. Нет других действий пользователя, чтобы рассмотреть или беспокоиться; моя единственная задача - импортировать данные в базу данных в кратчайшие сроки.
CXPACKET
ожиданиях: индекс перестраивает сами индексы сканирования (даже индекс перестраивается ), и эти сканирования могут использовать параллелизм. Вы не должны беспокоиться об этих ожиданиях - параллелизм, вероятно, помогает.