Estoy importando una gran cantidad de datos en una base de datos vacía, y antes de comenzar deshabilité todos los índices no agrupados no únicos para ver si podía mejorar el rendimiento de la importación.
Ahora quiero volver a habilitar los índices, y me pregunto si hay algo que pueda hacer para optimizar esto.
Hay> 100 tablas y casi 2.000 índices para reconstruir. La base de datos tiene un tamaño de 200 GB.
La sección clave del script que estoy ejecutando es esta:
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
Pensé en configurar ONLINE = OFF para la instrucción alter index, pero como los índices comienzan deshabilitados, no estaba seguro de que esta configuración tuviera algún efecto. También consideré configurar SORT_IN_TEMPDB = ON, pero como los archivos tempdb están en la misma unidad que los archivos .mdf de las bases de datos, supuse que tampoco había ningún beneficio en hacerlo.
Mientras ejecutaba el script de reconstrucción, noté que tengo muchos tipos de espera CXPACKET. Realmente no entiendo por qué sería eso o si es un problema que debería tratar de resolver.
Un último punto que puede ser relevante: todo mi servidor está actualmente inactivo, aparte de esta importación de datos en la base de datos. No hay otra actividad del usuario para considerar o preocuparse; Mi única preocupación es importar los datos a la base de datos en el menor tiempo posible.
CXPACKET
esperas: el índice se reconstruye a sí mismo escaneando índices (incluso el índice que se está reconstruyendo ), y esos escaneos pueden usar paralelismo. No debe preocuparse por esas esperas: el paralelismo probablemente esté ayudando.