J'exécute actuellement un script qui effectue un DBCC INDEXDEFRAG sur chaque table d'une base de données SQL Server 2005, une table à la fois. L'utilisation de DBCC DBREINDEX au lieu d'INDEXDEFRAG n'est pas une option, en raison des contraintes d'espace et des exigences de disponibilité.
J'ai remarqué qu'il fallait beaucoup de temps pour défragmenter certaines tables. Par exemple, si j'examine la vue de gestion dynamique "sys.dm_exec_requests", je peux voir que l'INDEXDEFRAG suivant est actuellement en train de se retourner sur l'index cluster d'une table qui a un id_table de 829610394:
DBCC INDEXDEFRAG (0, 829610394, 1)
Je sais que le processus de défragmentation prendra beaucoup de temps. En laissant de côté le fait que le script en cours d'exécution finira par défragmenter toutes les tables, y a-t-il un mal à exécuter manuellement un autre DBCC INDEXDEFRAG sur l'index cluster d'une autre table pendant l'exécution de la commande actuelle? Les deux tables seront-elles réellement défragmentées en même temps si je fais cela?
la source
Notez que DBCC INDEXDEFRAG & DBREINDEX sont obsolètes et remplacés par ALTER INDEX:
Quant à l'exécution simultanée de deux, cela dépend de la disposition de votre fichier. S'ils sont tous sur le (s) même (s) disque (s), vous ralentirez probablement chacun car ils se battront pour des E / S. Vous feriez mieux de REORG ou RECONSTRUIRE uniquement lorsque cela est nécessaire. Consultez le script de Michelle Ufford ici pour une solution automatisée: http://sqlfool.com/2010/04/index-defrag-script-v4-0/
la source