¿Es posible ejecutar dos comandos DBCC INDEXDEFRAG simultáneamente, cada uno en una tabla diferente?

9

Actualmente estoy ejecutando un script que realiza un DBCC INDEXDEFRAG en cada tabla en una base de datos SQL Server 2005, una tabla a la vez. Usar DBCC DBREINDEX en lugar de INDEXDEFRAG no es una opción, debido a limitaciones de espacio y requisitos de tiempo de actividad.

Me he dado cuenta de que lleva mucho tiempo desfragmentar ciertas tablas. Por ejemplo, si examino la vista de administración dinámica "sys.dm_exec_requests", puedo ver que el siguiente INDEXDEFRAG se está produciendo actualmente en el índice agrupado de una tabla que tiene un id_tabla de 829610394:

DBCC INDEXDEFRAG (0, 829610394, 1)

Sé que pasará mucho tiempo antes de que se complete el proceso de desfragmentación. Dejando a un lado el hecho de que el script que se está ejecutando actualmente eventualmente desfragmentará todas las tablas, ¿hay algún daño en que yo ejecute manualmente otro DBCC INDEXDEFRAG en el índice agrupado de otra tabla mientras se ejecuta el comando actual? ¿Se desfragmentarán ambas tablas al mismo tiempo si hago esto?

Implacable
fuente

Respuestas:

15

Sí, puedes hacerlo para varias tablas. No puede hacerlo para múltiples índices en la misma tabla: inventé un nuevo subrecurso de bloqueo de índice para evitarlo. Mismo comportamiento en ALTER INDEX ... REORGANIZAR con el que lo reemplacé en 2005.

Gracias

Paul S. Randal
fuente
2
¡No puede obtener una respuesta más precisa que la de la persona que la escribió! No se olvide de la carga de E / S asociada con realizar múltiples reconstrucciones o reorganizaciones al mismo tiempo, y asegúrese de usar ALTER INDEX en lugar del comando DBCC en adelante.
AndrewSQL
Estoy de acuerdo, no sé cómo sería posible obtener una respuesta más precisa sobre este tema en particular que una directa de Paul Randal. Gracias paul
RelentlessMike
6

Tenga en cuenta que DBCC INDEXDEFRAG & DBREINDEX están en desuso y se reemplazan por ALTER INDEX:

Importante

Esta característica se eliminará en una versión futura de Microsoft SQL Server. No use esta función en nuevos trabajos de desarrollo y modifique las aplicaciones que actualmente usan esta función lo antes posible. Use ALTER INDEX en su lugar. - http://msdn.microsoft.com/en-us/library/ms177571(v=SQL.90).aspx

En cuanto a ejecutar dos simultáneamente, depende de su diseño de archivo. Si todos están en el mismo disco (s), es probable que reduzca la velocidad de cada uno ya que lucharían entre sí por las E / S. Sería mejor REORG o REBUILD solo cuando sea necesario. Consulte el script de Michelle Ufford aquí para obtener una solución automatizada: http://sqlfool.com/2010/04/index-defrag-script-v4-0/

Eric Humphrey - lotsahelp
fuente
Gracias Eric En este caso particular, la base de datos se extiende a través de múltiples archivos de datos, en diferentes particiones y encima de una SAN DS8300 de IBM. Así que creo que estaré bien en lo que respecta a E / S.
RelentlessMike