Compartir a través de


Ejemplo de espacio en disco de índice

Cada vez que se crea, vuelve a generar o quita un índice, se requiere espacio en disco para las estructuras antiguas (de origen) y nuevas (de destino) en sus archivos y grupos de archivos adecuados. La asignación de la estructura antigua no se cancela hasta que no se confirma la transacción de creación del índice. También se puede necesitar espacio temporal adicional en disco para las operaciones de ordenación. Para obtener más información, consulte Requisitos de espacio en disco para las operaciones DDL de índice.

En este ejemplo, se determinan los requisitos de espacio en disco para crear un índice agrupado.

Supongamos que se cumplen las condiciones siguientes antes de crear el índice agrupado:

  • La tabla existente (montón) contiene 1 millón de filas. Cada fila tiene 200 bytes de longitud.

  • El índice no clúster A contiene 1 millón de filas. Cada fila tiene 50 bytes de longitud.

  • El índice no clúster B contiene 1 millón de filas. Cada fila tiene 80 bytes de longitud.

  • La opción de creación de memoria de índice se establece en 2 MB.

  • Se usa un valor de factor de relleno de 80 para todos los índices nuevos y existentes. Esto significa que las páginas están llenas el 80 %.

    Nota:

    Como resultado de crear un índice agrupado, los dos índices no clúster deben volver a generarse para reemplazar el indicador de fila por la nueva clave de índice agrupada.

Cálculos de espacio en disco para una operación de índice sin conexión

En los pasos siguientes, se calcula el espacio en disco temporal que se usará durante la operación de índice y el espacio en disco permanente para almacenar los nuevos índices. Los cálculos mostrados son aproximados; los resultados se redondean hacia arriba y solo tienen en cuenta el tamaño del nivel hoja de índice. La tilde (~) se usa para indicar cálculos aproximados.

  1. Determine el tamaño de las estructuras de origen.

    Heap: 1 millón * 200 bytes ~ 200 MB

    Índice no clúster A: 1 millón * 50 bytes / 80% ~ 63 MB

    Índice no clúster B: 1 millón * 80 bytes / 80% ~ 100 MB

    Tamaño total de las estructuras existentes: 363 MB

  2. Determina el tamaño de las estructuras de índice objetivo. Supongamos que la nueva clave agrupada es de 24 bytes, incluido un uniqueifier. El indicador de fila (8 bytes de longitud) en ambos índices no clúster se reemplazará por esta clave agrupada.

    Índice agrupado: 1 millón * 200 bytes / 80% ~ 250 MB

    Índice no clúster A: 1 millón * (50 - 8 + 24) bytes / 80% ~ 83 MB

    Índice no clúster B: 1 millón * (80 - 8 + 24) bytes / 80% ~ 120 MB

    Tamaño total de nuevas estructuras: 453 MB

    El espacio total en disco necesario para admitir las estructuras de origen y destino durante la operación de índice es de 816 MB (363 + 453). El espacio asignado actualmente a las estructuras de origen será liberado cuando se confirme la operación de indexación.

  3. Determine el espacio en disco temporal adicional para la ordenación.

    Se muestran los requisitos de espacio para la clasificación en tempdb (con SORT_IN_TEMPDB activado en ON) y para la clasificación en la ubicación de destino (con SORT_IN_TEMPDB desactivado en OFF).

    1. Cuando SORT_IN_TEMPDB se establece en ON, tempdb debe tener suficiente espacio en disco para contener el índice más grande (1 millón * 200 bytes ~ 200 MB). El factor de relleno no se considera en la operación de ordenación.

      Espacio en disco adicional (en la ubicación tempdb) igual al valor de la opción Configurar la opción de memoria para creación de índices del servidor = 2 MB.

      Tamaño total del espacio en disco temporal con SORT_IN_TEMPDB establecido en ON ~ 202 MB.

    2. Cuando SORT_IN_TEMPDB se establece en OFF (valor predeterminado), se usan los 250 MB de espacio en disco ya considerados para el nuevo índice del paso 2 para la ordenación.

      Espacio en disco adicional (en la ubicación de destino) igual a el valor de la opción de configuración de memoria para la creación de índices del servidor = 2 MB.

      Tamaño total del espacio en disco temporal con SORT_IN_TEMPDB establecido en OFF = 2 MB.

Con tempdb, se necesitaría un total de 1018 MB (816 + 202) para crear los índices agrupados y no agrupados. Aunque el uso de tempdb aumenta la cantidad de espacio temporal en disco usado para crear un índice, puede reducir el tiempo necesario para crear un índice cuando tempdb se encuentra en un conjunto diferente de discos que la base de datos de usuario. Para obtener más información sobre el uso de tempdb, consulte SORT_IN_TEMPDB Opción para índices.

Sin usar tempdb, se necesitaría un total de 818 MB (816+ 2) para crear los índices agrupados y no agrupados.

Cálculos de espacio en disco para una operación de índice agrupado en línea

Al crear, quitar o recompilar un índice agrupado en línea, se requiere espacio en disco adicional para compilar y mantener un índice de asignación temporal. Este í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, tanto antiguas como nuevas.

Para calcular el espacio en disco necesario para una operación de índice en clúster en línea, siga los pasos que se muestran para una operación de índice sin conexión y agregue esos resultados a los resultados del paso siguiente.

  • Determine el espacio para el índice de mapeo temporal.

    En este ejemplo, el marcador anterior es el identificador de fila (RID) del montón (8 bytes) y el nuevo marcador es la clave de agrupación (24 bytes, incluyendo un uniqueifier). No hay columnas superpuestas entre los marcadores antiguos y nuevos.

    Tamaño del índice de mapeo temporal = 1 millón * (8 bytes + 24 bytes) / 80% ~ 40 MB.

    Este espacio en disco debe agregarse al espacio en disco necesario en la ubicación de destino si SORT_IN_TEMPDB está establecido en OFF o en tempdb si SORT_IN_TEMPDB está establecido en ACTIVADO.

Para obtener más información sobre el mapa de índice temporal, consulte Requisitos de espacio en disco para las operaciones de DDL de índice.

Resumen del espacio en disco

En la tabla siguiente se resumen los resultados de los cálculos de espacio en disco.

Operación de índice Requisitos de espacio en disco para las ubicaciones de las estructuras siguientes
Operación de índice fuera de línea con SORT_IN_TEMPDB activado Espacio total durante la operación: 1018 MB:

-Tabla e índices existentes: 363 MB*

-
tempdb: 202 MB*

-Nuevos índices: 453 MB

Espacio total necesario después de la operación: 453 MB
Operación de índice sin conexión con SORT_IN_TEMPDB = OFF Espacio total durante la operación: 816 MB:

-Tabla e índices existentes: 363 MB*

-Nuevos índices: 453 MB

Espacio total necesario después de la operación: 453 MB
Operación de índice en línea con SORT_IN_TEMPDB = ON Espacio total durante la operación: 1058 MB:

-Tabla e índices existentes: 363 MB*

- tempdb (incluye el índice de asignación): 242 MB*

-Nuevos índices: 453 MB

Espacio total necesario después de la operación: 453 MB
Operación de índice en línea con SORT_IN_TEMPDB = DESACTIVADO Espacio total durante la operación: 856 MB:

-Tabla e índices existentes: 363 MB*

-Índice de asignación temporal: 40 MB*

-Nuevos índices: 453 MB

Espacio total necesario después de la operación: 453 MB

Este espacio se desasigna después de confirmar la operación de indexación.

En este ejemplo no se tiene en cuenta ningún espacio temporal adicional en disco necesario en tempdb para los registros de versión creados por las operaciones simultáneas de actualización y eliminación de usuarios.

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

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