Compartir a través de


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

Se aplica a:SQL ServerAzure SQL DatabaseInstancia administrada de Azure SQLBase de datos SQL en Microsoft Fabric

El espacio en disco es una consideración importante a la hora de 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 artículo 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.

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

  • DROP INDEX cuando se desconecta un índice agrupado sin especificar la cláusula MOVE TO y no existen índices no agrupados.

  • CREATE TABLE (PRIMARY KEY o UNIQUE restricciones)

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.

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

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 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 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 clúster 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 solo 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 se establece 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 se encuentra en un conjunto de discos diferentes de la base de datos de usuario.

Si SORT_IN_TEMPDB se establece OFF en (valor predeterminado), cada índice, incluidos los índices con particiones, se ordena en su espacio en disco de destino y solo se requiere el 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 las 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 clúster temporal para asignar los antiguos marcadores a los nuevos. Si la opción SORT_IN_TEMPDB se establece a 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 marcadores antiguos y nuevos, que incluye los identificadores únicos y los identificadores de registro, y solo una copia única 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 las 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 fila 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 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 .