J'importe une grande quantité de données dans une base de données vide et avant de commencer, j'ai désactivé tous les index non cluster non uniques pour voir si je pouvais améliorer les performances de l'importation.
Maintenant, je veux réactiver les index, et je me demande si je peux faire quelque chose pour l'optimiser.
Il y a> 100 tables et près de 2 000 index à reconstruire. La base de données a une taille de 200 Go.
La section clé du script que j'exécute est la suivante:
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
J'ai envisagé de définir ONLINE = OFF pour l'instruction alter index, mais comme les index commencent désactivés, je n'étais pas sûr que ce paramètre aurait un effet. J'ai également envisagé de définir SORT_IN_TEMPDB = ON, mais comme les fichiers tempdb sont sur le même lecteur que les fichiers .mdf des bases de données, j'ai supposé qu'il n'y avait également aucun avantage à le faire.
Lors de l'exécution du script de reconstruction, j'ai remarqué que j'avais beaucoup de types d'attente CXPACKET. Je ne comprends pas vraiment pourquoi ce serait ou si c'est un problème que je devrais chercher à résoudre.
Un dernier point qui peut être pertinent: l'ensemble de mon serveur est actuellement inactif à part cette importation de données dans la base de données. Il n'y a aucune autre activité utilisateur à considérer ou à s'inquiéter; ma seule préoccupation est d'importer les données dans la base de données dans les plus brefs délais.
CXPACKET
attentes: les reconstructions d'index elles-mêmes analysent les index (même l'index en cours de reconstruction ), et ces analyses peuvent utiliser le parallélisme. Vous ne devriez pas vous inquiéter de ces attentes - le parallélisme est probablement utile.