Compartir a través de


Ejemplo de espacio en disco de índice

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

Cuando se crea, regenera o quita un índice, se necesita espacio en disco para las estructuras antiguas (origen) y nuevas (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. Es posible que también se necesite 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 las necesidades de espacio en disco para crear un índice clúster.

Supongamos que se cumplen las siguientes condiciones antes de crear el índice clúster:

  • La tabla existente (montón) contiene 1 millón de filas. Cada fila tiene una longitud de 200 bytes.
  • El índice no clúster A contiene 1 millón de filas. Cada fila tiene una longitud de 50 bytes.
  • El índice no clúster B contiene 1 millón de filas. Cada fila tiene una longitud de 80 bytes.
  • La opción index create memory está establecida en 2 MB.
  • Se utiliza un valor de factor de relleno de 80 para todos los índices existentes y nuevos. Esto significa que se llena el 80% de las páginas.

Nota:

Como resultado de la creación de un índice clúster, ambos índices no clúster deben regenerarse para reemplazar el indicador de filas con la clave del nuevo índice clúster.

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 utilizará en la operación del índice y el espacio en disco permanente necesario para almacenar los nuevos índices. Los cálculos que se muestran son aproximados; los resultados se redondean al número superior y solo se tiene en cuenta el tamaño del nivel hoja del índice. Para indicar cálculos aproximados, se utiliza la tilde (~).

  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. Determine el tamaño de las estructuras de índice de destino. Supongamos que la clave del nuevo índice agrupado tiene una longitud de 24 bytes, incluido un valor de unicidad. El indicador de filas (8 bytes de longitud) en ambos índices no clúster se reemplazará con esta clave de agrupación en clústeres.

    • Í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). Cuando se confirma la operación de índice, se cancela la asignación del espacio asignado a las estructuras de origen.

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

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

    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 memoria para crear el índice = 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 utilizan los 250 MB de espacio en disco que ya se habían considerado para el nuevo índice en el paso 2 para la clasificación.

      Espacio en disco adicional (en la ubicación de destino) igual al valor de memoria de creación del índice = 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 tempdb de 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, vea la opción SORT_IN_TEMPDB 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

Cuando se crea, quita o regenera un índice clúster en línea, se necesita espacio en disco adicional para generar y mantener un índice de asignación temporal. Este índice de asignación temporal contiene un registro por cada fila de la tabla y su contenido es la unión de las columnas de marcadores antiguas y nuevas.

Para calcular el espacio en disco necesario para una operación de índice clúster en línea, siga los pasos indicados para una operación de índice sin conexión y agregue el resultado al resultado del paso siguiente.

  • Determine el espacio para el índice de asignación temporal.

    En este ejemplo, el marcador antiguo es el Id. de fila (RID) del montón (8 bytes) y el nuevo marcador es la clave de agrupación en clústeres (24 bytes incluido un valor de unicidad). No existen columnas superpuestas entre los marcadores antiguos y nuevos.

    Tamaño del índice de asignación 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 ON.

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

Resumen del espacio en disco

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

Operación de índice Requisitos de espacio en disco para las ubicaciones de las siguientes estructuras
Operación de índice sin conexión con SORT_IN_TEMPDB = ON Espacio total durante la operación: 1018 MB

- Tabla e índices existentes: 363 MB 1
- tempdb: 202 MB 1
- 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 1
- 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 1
- 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 = OFF Espacio total durante la operación: 856 MB

- Tabla e índices existentes: 363 MB 1
- Índice de asignación temporal: 40 MB 1
- Nuevos índices: 453 MB

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

1 Este espacio se desasigna después de confirmar la operación de índice.

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