Est-il possible d'exécuter simultanément deux commandes DBCC INDEXDEFRAG, chacune sur une table différente?

9

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?

RelentlessMike
la source

Réponses:

15

Oui, vous pouvez le faire pour plusieurs tables. Vous ne pouvez pas le faire pour plusieurs index sur la même table - j'ai inventé une nouvelle sous-ressource de verrouillage d'index pour l'empêcher. Même comportement dans ALTER INDEX ... RÉORGANISER avec lequel je l'ai remplacé en 2005.

Merci

Paul S. Randal
la source
2
Vous ne pouvez pas obtenir une réponse plus précise que celle de la personne qui l'a écrite! N'oubliez pas la charge d'E / S associée à l'exécution de plusieurs reconstructions ou réorganisations en même temps, et assurez-vous d'utiliser ALTER INDEX plutôt que la commande DBCC à l'avenir.
AndrewSQL
D'accord, je ne sais pas comment il serait possible d'obtenir une réponse plus précise sur cette question particulière que celle directement de Paul Randal. Merci Paul.
RelentlessMike
6

Notez que DBCC INDEXDEFRAG & DBREINDEX sont obsolètes et remplacés par ALTER INDEX:

Important

Cette fonctionnalité sera supprimée dans une future version de Microsoft SQL Server. N'utilisez pas cette fonctionnalité dans de nouveaux travaux de développement et modifiez dès que possible les applications qui utilisent actuellement cette fonctionnalité. Utilisez plutôt ALTER INDEX. - http://msdn.microsoft.com/en-us/library/ms177571(v=SQL.90).aspx

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/

Eric Humphrey - lotsahelp
la source
Merci Eric. Dans ce cas particulier, la base de données est répartie sur plusieurs fichiers de données, sur différentes partitions et au-dessus d'un SAN IBM DS8300. Je pense donc que je serai d'accord en ce qui concerne les E / S.
RelentlessMike