Compartir a través de


Requisitos de espacio en disco para operaciones DDL de índice

El espacio en disco es una importante consideración a tener en cuenta al crear, volver a generar o quitar índices. Un espacio en disco inadecuado puede degradar el rendimiento e incluso provocar errores en las operaciones de índice. En este tema se proporciona información general que puede ayudar a determinar la cantidad de espacio necesario para las operaciones de lenguaje de definición de datos (DDL).

Operaciones de índice que no requieren espacio en disco adicional

Las siguientes operaciones de índice no requieren espacio en disco adicional:

  • ALTER INDEX REORGANIZE; sin embargo, se requiere espacio de registro.

  • DROP INDEX cuando se quita un índice no agrupado.

  • DROP INDEX cuando se quita un índice clúster sin conexión sin especificar la cláusula MOVE TO y no existen índices no agrupados.

  • CREATE TABLE (restricciones PRIMARY KEY o UNIQUE).

Operaciones de índice que requieren espacio en disco adicional

Todas las demás operaciones DDL de índice requieren espacio temporal en disco adicional para utilizarlo durante la operación y espacio en disco permanente para almacenar la estructura (o estructuras) del nuevo índice. Para obtener más información acerca de las estructuras de índice, vea Arquitectura de estructuras de tablas y datos de índices.

Cuando se crea una nueva estructura de índice, se requiere espacio en disco para ambas estructuras, la antigua (origen) y la nueva (destino), en los archivos y grupos de archivos correspondientes. La asignación de la antigua estructura no se cancela hasta que se valide la transacción de creación de índice.

Las siguientes operaciones DDL de índice crean estructuras y requieren espacio en disco adicional:

  • CREATE INDEX

  • CREATE INDEX WITH DROP_EXISTING

  • ALTER INDEX REBUILD

  • ALTER TABLE ADD CONSTRAINT (PRIMARY KEY o UNIQUE)

  • ALTER TABLE DROP CONSTRAINT (PRIMARY KEY o UNIQUE) cuando la restricción se basa en un índice clúster

  • DROP INDEX MOVE TO (se aplica sólo a ndices clúster)

Espacio temporal en disco para ordenación

Además del espacio en disco necesario para las estructuras de origen y destino, se necesita espacio temporal en disco para la ordenación, a menos que el optimizador de consultas busque un plan de ejecución que no requiera ordenación.

Si se requiere ordenación, ésta se produce en un nuevo índice a la vez. Por ejemplo, cuando se vuelve a generar un índice clúster con los índices no agrupados que van asociados en una instrucción única, los índices se ordenan uno tras otro. Por lo tanto, el espacio temporal en disco que se necesita para ordenar sólo tiene que ser tan grande como el índice más grande de la operación. Éste casi siempre se corresponde con el índice clúster.

Si la opción SORT_IN_TEMPDB está establecida en ON, el índice más grande debe caber en tempdb. Aunque esta opción aumenta la cantidad de espacio temporal en disco utilizado para crear un índice, puede reducir el tiempo necesario para crear el índice cuando tempdb se encuentra en un conjunto de discos diferente al de la base de datos de usuario. Para obtener más información sobre la ordenación en tempdb, vea tempdb y la creación de índices.

Si SORT_IN_TEMPDB está establecido en OFF (el valor predeterminado), cada índice, incluidos los índices con particiones, se ordena en su espacio en disco de destino y sólo se necesita espacio en disco para las nuevas estructuras de índice.

Para obtener un ejemplo de cálculo de espacio en disco, vea Ejemplo de espacio en disco del índice.

Espacio temporal en disco para operaciones de índice en línea

Cuando se realizan operaciones de índice en línea, se necesita espacio temporal en disco adicional.

Cuando se crea un índice clúster, se vuelve a generar o se quita en línea, se crea un índice no agrupado temporal para asignar los antiguos marcadores a los nuevos. Si la opción SORT_IN_TEMPDB está establecida en ON, el índice temporal se crea en tempdb. Si SORT_IN_TEMPDB está establecida en OFF, se utiliza el mismo grupo de archivos o esquema de particiones que el índice de destino. El índice de asignación temporal contiene un registro para cada fila de la tabla y su contenido es la unión de las columnas de marcadores antiguos y nuevos, que incluye uniqueifiers e identificadores de registro, y sólo una copia única de cualquier columna que se utilice en ambos marcadores. Para obtener más información acerca de las operaciones de índice en línea, vea Realizar operaciones de índices en línea.

[!NOTA]

La opción SORT_IN_TEMPDB no se puede establecer para instrucciones DROP INDEX. El índice de asignación temporal se crea siempre en el mismo grupo de archivos o esquema de particiones que el índice de destino.

Las operaciones de índice en línea utilizan versiones de filas para aislar la operación de índice de los efectos de modificaciones efectuadas por otras transacciones. Así se evita la necesidad de solicitar que se compartan bloqueos en filas que se han leído. Las operaciones simultáneas de eliminación y actualización de usuarios durante las operaciones de índice en línea requieren espacio para registros de versión en tempdb. Para obtener más información, vea Realizar operaciones de índices en línea y Descripción de los niveles de aislamiento basado en el control de versiones de filas.