Compartir a través de


Requisitos de espacio en disco para las operaciones de Índice DDL

El espacio en disco es una consideración importante al crear, recompilar o quitar índices. El espacio en disco inadecuado puede degradar el rendimiento o incluso provocar un error en la operación de índice. En este tema se proporciona información general que puede ayudarle a determinar la cantidad de espacio en disco necesario para las operaciones del lenguaje de definición de datos de índice (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.

  • Utiliza DROP INDEX cuando eliminas un índice no agrupado.

  • DROP INDEX cuando se quita un índice agrupado de manera desconectada sin especificar la cláusula MOVE TO y los índices no agrupados no existen.

  • CREATE TABLE (restricciones de PRIMARY KEY o UNIQUE)

Operaciones de índice que requieren espacio en disco adicional

Todas las demás operaciones DDL de índice requieren espacio en disco temporal adicional para usarlo durante la operación y espacio en disco permanente para almacenar la nueva estructura o estructuras de índice.

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 estructura antigua no se cancela hasta que no se confirma la transacción de creación del índice.

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

  • CREAR ÍNDICE

  • CREAR ÍNDICE CON DROP_EXISTING

  • ALTERAR EL ÍNDICE RECONSTRUIR

  • ALTER TABLE AÑADIR CONSTRAINT (PRIMARY KEY o UNIQUE)

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

  • DROP INDEX MOVE TO (Solo se aplica a los índices agrupados).

Espacio temporal en disco para ordenar

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

Si se requiere la ordenación, la ordenación se produce en un nuevo índice a la vez. Por ejemplo, al recompilar un índice agrupado y los índices no agrupados asociados dentro de una sola instrucción, los índices se ordenan uno después del otro. Por lo tanto, el espacio en disco temporal adicional necesario para la ordenación solo debe ser tan grande como el índice más grande de la operación. Esto casi siempre es el índice agrupado.

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 que se usa para crear un índice, puede reducir el tiempo necesario para crear un índice cuando tempdb está en un conjunto de discos diferentes de la base de datos de usuario.

Si SORT_IN_TEMPDB se establece en OFF (valor predeterminado) cada índice, incluidos los índices con particiones, se ordena en su espacio en disco de destino; y solo se requiere espacio en disco para las nuevas estructuras de índice.

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

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

Al realizar operaciones de índice en línea, se requiere espacio en disco temporal adicional.

Si se crea, reconstruye o elimina un índice agrupado en línea, se crea un índice temporal no agrupado para asignar marcadores antiguos a nuevos marcadores. Si la opción SORT_IN_TEMPDB está establecida en ON, este índice temporal se crea en tempdb. Si SORT_IN_TEMPDB se establece en OFF, se usa el mismo esquema de grupo de archivos o partición 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 marcador antiguas y nuevas, incluidos los desambiguadores y los identificadores de registro, e incluye solo una copia de cualquier columna que se utilice en ambos marcadores. Para obtener más información sobre las operaciones de índice en línea, vea Realizar operaciones de índice en línea.

Nota:

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

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

Ejemplo de índice de espacio en disco

Espacio en disco del registro de transacciones para las operaciones de índice

Calcular el tamaño de una tabla

Estimar el tamaño de un índice clúster

Estimar el tamaño de un índice no clúster

Estimar el tamaño de un montón

CREAR ÍNDICE (Transact-SQL)

ALTER INDEX (Transact-SQL)

DROP INDEX (Transact-SQL)

Especificar el factor de relleno para un índice

Reorganización y recompilación de índices