Operaciones de índice en paralelo
Los planes de consulta generados para las operaciones de índice que crean o regeneran un índice o quitan un índice clúster, permiten las operaciones en paralelo de varios subprocesos en equipos con varios microprocesadores.
Nota
Las operaciones de índice en paralelo sólo están disponibles en SQL Server 2008 Enterprise.
SQL Server utiliza los mismos algoritmos para determinar el grado de paralelismo (el número total de subprocesos diferentes que se ejecutan) en las operaciones de índice que en otras consultas. El grado máximo de paralelismo en una operación de índice está sujeto a la opción de configuración del servidor max degree of parallelism. Puede reemplazar el valor de max degree of parallelism en operaciones individuales de índice si establece la opción de índice MAXDOP en las instrucciones CREATE INDEX, ALTER INDEX, DROP INDEX y ALTER TABLE.
Cuando el Motor de base de datos genera un plan de ejecución de índice, el número de operaciones en paralelo se establece en el valor más bajo de los valores siguientes:
El número de microprocesadores o CPU en el equipo.
El número especificado en la opción de configuración del servidor max degree of parallelism.
El número de CPU que aún no han superado el umbral de trabajo realizado para subprocesos de SQL Server.
Por ejemplo, en un equipo con 8 CPU, donde max degree of parallelism se ha definido en 6, no se generan más de seis subprocesos en paralelo para una operación de índice. Si cinco de las CPU del equipo han excedido ya el umbral de trabajo de SQL Server cuando se crea un plan de ejecución de índice, el plan de ejecución especificará únicamente tres subprocesos en paralelo.
Entre las fases principales de una operación de índice en paralelo se incluyen lo siguiente:
Un subproceso de coordinación recorre la tabla rápida y aleatoriamente para calcular la distribución de las claves de índice. El subproceso de coordinación establece los límites de clave que crearán un número de intervalos de clave igual al grado de operaciones en paralelo, donde cada intervalo de clave se estima para cubrir números similares de filas. Por ejemplo, si hay cuatro millones de filas en la tabla y el grado de paralelismo es 4, el subproceso de coordinación determinará los valores de clave que delimitarán cuatro conjuntos de filas con 1 millón de filas en cada uno. Si no se pueden establecer suficientes intervalos de clave para utilizar todas las CPU, el grado de paralelismo se reduce en consecuencia.
El subproceso de coordinación genera un número de subprocesos igual al grado de operaciones en paralelo y espera hasta que estos subprocesos finalicen su trabajo. Cada subproceso recorre la tabla base utilizando un filtro que recupera sólo filas con valores de clave en el intervalo asignado al subproceso. Cada subproceso crea una estructura de índice para las filas en su intervalo de clave. En el caso de un índice con particiones, cada subproceso genera un número especificado de particiones. Las particiones no se comparten entre los subprocesos. Para obtener más información acerca de cómo se crea un índice, vea tempdb y la creación de índices.
Una vez que han terminado los subprocesos en paralelo, el subproceso de coordinación conecta las subunidades del índice con un único índice. Esta fase sólo se aplica a operaciones de índice sin conexión.
Las instrucciones CREATE TABLE o ALTER TABLE individuales pueden tener varias restricciones que requieren la creación de un índice. Estas operaciones de creación de índice se llevan a cabo en serie, aunque cada operación de creación de índice puede ser una operación en paralelo en un equipo con varias CPU.