Compartir a través de


Estimar el tamaño de un índice agrupado

Actualizado: 15 de septiembre de 2007

Los siguientes pasos pueden utilizarse para calcular el espacio necesario para almacenar datos en un índice agrupado:

  1. Calcule el espacio utilizado para almacenar datos en el nivel de hoja del índice agrupado.
  2. Calcule el espacio utilizado para almacenar información del índice agrupado.
  3. Sume los valores calculados.

Paso 1. Calcular el espacio utilizado para almacenar datos en el nivel de hoja

  1. Especifique el número de filas que habrá en la tabla:
    Num_Rows = número de filas de la tabla

  2. Especifique el número de columnas de longitud fija y de longitud variable, y calcule el espacio necesario para su almacenamiento:
    Calcule el espacio que ocupa cada uno de estos grupos de columnas en la fila de datos. El tamaño de una columna depende del tipo y la longitud especificados para los datos. Para obtener más información, vea Tipos de datos (motor de base de datos).
    Num_Cols = número total de columnas (de longitud fija y variable)
    Fixed_Data_Size = tamaño total en bytes de todas las columnas de longitud fija
    Num_Variable_Cols = número de columnas de longitud variable
    Max_Var_Size = tamaño máximo en bytes de todas las columnas de longitud variable

  3. Si el índice agrupado no es único, tenga en cuenta la columna de valor de unicidad:
    La columna de valor de unicidad es una columna de longitud variable que admite valores NULL. No será NULL y tendrá 4 bytes de tamaño en filas que tienen valores de clave no únicos. Este valor forma parte de la clave de índice y es necesario para asegurarse de que cada fila tiene un valor de clave único.
    Num_Cols = Num_Cols + 1
    Num_Variable_Cols = Num_Variable_Cols + 1
    Max_Var_Size = Max_Var_Size + 4
    Estas modificaciones presuponen que todos los valores no serán únicos.

  4. Una parte de la fila, conocida como el mapa de bits NULL, se reserva para administrar la aceptación de valores NULL en las columnas. Calcule el tamaño:
    Null_Bitmap = 2 + ((Num_Cols + 7) / 8)
    Sólo debe utilizarse la parte entera de la expresión anterior; descarte el resto.

  5. Calcule el tamaño de los datos de longitud variable:
    Si hay columnas de longitud variable en la tabla, determine cuánto espacio se utiliza para almacenar las columnas en la fila:
    Variable_Data_Size* = 2 + (Num_Variable_Cols x 2) + *Max_Var_Size En esta fórmula, se supone que todas las columnas de longitud variable están llenas al 100 %. Si prevé que va a utilizarse un porcentaje inferior del espacio de almacenamiento de columnas de longitud variable, puede ajustar el valor de Max_Var_Size en función de ese porcentaje para obtener una estimación más precisa del tamaño global de la tabla.

    [!NOTA] SQL Server 2005 presenta la capacidad de combinar columnas varchar, nvarchar, varbinary o sql_variant de forma que el ancho de tabla total definido puede superar los 8060 bytes. La longitud de cada una de estas columnas debe ajustarse al límite de 8.000 bytes en columnas varchar, varbinary o sql_variant y de 4.000 bytes en columnas nvarchar. Sin embargo, el ancho combinado puede superar el límite de 8.060 bytes de una tabla. Para obtener más información, vea Datos de desbordamiento de fila superiores a 8 KB.

    Si no hay columnas de longitud variable, seleccione el valor 0 para Variable_Data_Size.

  6. Calcule el tamaño total de la fila:
    Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4
    El valor 4 representa la sobrecarga del encabezado de una fila de datos.

  7. Calcule el número de filas por página (8.096 bytes libres por página):
    Rows_Per_Page = 8096 / (Row_Size + 2)
    Dado que las filas no abarcan varias páginas, el número de filas por página debe redondearse hacia abajo a la fila completa más cercana. El valor 2 de la fórmula representa la entrada de la fila en la matriz de zonas de la página.

  8. Calcule el número de filas libres reservadas por página, según el factor de relleno especificado:
    Free_Rows_Per_Page = 8096 x ((100 - Fill_Factor) / 100) / (Row_Size + 2)
    El factor de relleno que se utiliza en el cálculo es un valor entero, en vez de un porcentaje. Dado que las filas no abarcan varias páginas, el número de filas por página debe redondearse hacia abajo a la fila completa más cercana. A medida que aumenta el factor de relleno, más datos se almacenan en cada página y menos páginas habrá. El valor 2 de la fórmula representa la entrada de la fila en la matriz de zonas de la página.

  9. Calcule el número de páginas necesarias para almacenar todas las filas:
    Num_Pages = Num_Rows / (Rows_Per_Page - Free_Rows_Per_Page)
    El número de páginas estimado debe redondearse hacia arriba a la página completa más cercana.

  10. Calcule la cantidad de espacio necesario para almacenar los datos en el nivel de hoja (8.192 bytes por página):
    Leaf_space_used* = 8192 x *Num_Pages

Paso 2. Calcular el espacio utilizado para almacenar información de índice

Los siguientes pasos pueden utilizarse para calcular el espacio necesario para almacenar los niveles superiores del índice:

  1. Especifique el número de columnas de longitud fija y de longitud variable de la clave de índice y calcule el espacio necesario para su almacenamiento:
    Las columnas de clave de un índice pueden incluir columnas de longitud fija y de longitud variable. Para estimar el tamaño de las filas de índice de nivel interior, calcule el espacio que ocupa cada uno de estos grupos de columnas en la fila de índice. El tamaño de una columna depende del tipo y la longitud especificados para los datos. Para obtener más información, vea Tipos de datos (motor de base de datos).
    Num_Key_Cols = número total de columnas de clave (de longitud fija y variable)
    Fixed_Key_Size = tamaño total en bytes de todas las columnas de clave de longitud fija
    Num_Variable_Key_Cols = número de columnas de clave de longitud variable
    Max_Var_Key_Size = tamaño máximo en bytes de todas las columnas de clave de longitud variable
  2. Tenga en cuenta cualquier columna de valor de unicidad si el índice no es único:
    La columna de valor de unicidad es una columna de longitud variable que admite valores NULL. No será NULL y tendrá 4 bytes de tamaño en filas que tienen valores de clave de índice no únicos. Este valor forma parte de la clave de índice y es necesario para asegurarse de que cada fila tiene un valor de clave único.
    Num_Key_Cols = Num_Key_Cols + 1
    Num_Variable_Key_Cols = Num_Variable_Key_Cols + 1
    Max_Var_Key_Size = Max_Var_Key_Size + 4
    Estas modificaciones presuponen que todos los valores no serán únicos.
  3. Calcule el tamaño del mapa de bits NULL:
    Si hay columnas que admiten valores NULL en la clave de índice, una parte de la fila del índice se reserva para el mapa de bits NULL. Calcule el tamaño:
    Index_Null_Bitmap = 2 + ((número de columnas de clave que aceptan valores NULL + 7) / 8)
    Sólo debe utilizarse la parte entera de la expresión anterior. Descarte el resto.
    Si no hay columnas de clave que admitan valores NULL, seleccione el valor 0 para Index_Null_Bitmap.
  4. Calcule el tamaño de los datos de longitud variable:
    Si hay columnas de longitud variable en el índice, determine cuánto espacio se utiliza para almacenar las columnas en la fila de índice:
    Variable_Key_Size* = 2 + (Num_Variable_Key_Cols x 2) + *Max_Var_Key_Size En esta fórmula, se supone que todas las columnas de longitud variable están llenas al 100 %. Si prevé que va a utilizarse un porcentaje inferior del espacio de almacenamiento de columnas de longitud variable, puede ajustar el valor de Max_Var_Key_Size en función de ese porcentaje para obtener una estimación más precisa del tamaño global de la tabla.
    Si no hay columnas de longitud variable, seleccione el valor 0 para Variable_Key_Size.
  5. Calcule el tamaño de la fila de índice:
    Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1 (para sobrecarga de encabezado de una fila de índice) + 6 (para el puntero de Id. de página secundaria)
  6. Calcule el número de filas de índice por página (8.096 bytes disponibles por página):
    Index_Rows_Per_Page = 8096 / (Index_Row_Size + 2)
    Dado que las filas de índice no abarcan varias páginas, el número de filas de índice por página debe redondearse hacia abajo a la fila completa más cercana. El valor 2 de la fórmula representa la entrada de la fila en la matriz de zonas de la página.
  7. Calcule el número de niveles del índice:
    Levels = 1 + log Index_Rows_Per_Page (Num_Rows / Index_Rows_Per_Page)
    Redondee por exceso este valor hasta el número entero más cercano. Este valor no incluye el nivel de hoja del índice agrupado.
  8. Calcule el número de páginas del índice:
    Num_Index_Pages =∑Level (Num_Rows / (Index_Rows_Per_PageLevel)) donde 1 <= nivel <= Levels
    Como un ejemplo sencillo, imagine un índice en el que el número total de filas de índice necesarias en el nivel superior a la hoja es 1000 y en cada página caben 25 filas de índice. Esto significa que se necesitan 40 páginas para almacenar esas 1000 filas. El nivel siguiente del índice debe almacenar 40 filas. Esto significa que necesita 2 páginas. El nivel final del índice debe almacenar 2 filas. Esto significa que necesita 1 página. Si se utilizan estos números en las fórmulas anteriores, el resultado será el siguiente:
    Alto = 1 + log25 (1000 / 25) = 3
    Num_Index_Pages = (1000/(25)3) + (1000/(25)2) + (1000/(25)1) = 43, que es el número de páginas descrito en el ejemplo.
  9. Calcule el tamaño del índice (8.192 bytes por página):
    Index_Space_Used* = 8192 x *Num_Index_Pages

Paso 3. Sume los valores calculados.

Sume los valores obtenidos en los dos pasos anteriores:

Tamaño del índice agrupado (bytes) = Leaf_Space_Used + Index_Space_used

Este cálculo no tiene en cuenta lo siguiente:

  • Particiones
    La sobrecarga de espacio de las particiones es mínima, pero resulta complejo calcularla. No es importante incluirla.
  • Páginas de asignación
    Se utiliza al menos una página IAM para realizar un seguimiento de las páginas asignadas a un montón, pero la sobrecarga de espacio es mínima y no existe ningún algoritmo para calcular de forma determinista el número exacto de páginas IAM que se utilizarán.
  • Valores de objetos grandes (LOB)
    El algoritmo para determinar exactamente la cantidad de espacio que se utilizará para almacenar los tipos de datos LOB y los valores varchar(max), varbinary(max), nvarchar(max), text, ntext, xml y image es complejo. Basta con agregar sólo el tamaño medio de los valores LOB que se esperan, multiplicarlo por Num_Rows y agregarlo al tamaño total del índice agrupado.

Vea también

Conceptos

Directrices para diseñar índices agrupados
Crear índices (motor de base de datos)
Directrices para diseñar índices no agrupados
Calcular el tamaño de una tabla
Estimar el tamaño de un índice no agrupado
Estimar el tamaño de un montón

Otros recursos

Estimar el tamaño de una base de datos

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Lanzamiento Historial

15 de septiembre de 2007

Contenido modificado:
  • Se agregó información del redondeo al paso 2.7.