Я імпортую велику кількість даних у порожню базу даних, і перед початком роботи я відключив усі не унікальні некластеризовані індекси, щоб побачити, чи можу я покращити ефективність імпорту.
Тепер я хочу знову включити індекси, і мені цікаво, чи є щось, що я можу зробити, щоб оптимізувати це.
Існує> 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
очікування: індекс відновлює самі скануючі індекси (навіть індекс перебудовується ), і ці сканування можуть використовувати паралелізм. Ви не повинні турбуватися про ці очікування - паралелізм, мабуть, допомагає.