Factor de relleno

La opción de factor de relleno permite optimizar el almacenamiento y rendimiento de los datos de índice. Cuando se crea o se vuelve a generar un índice, el valor de factor de relleno determina el porcentaje de espacio en cada página del nivel de hoja que se tiene que rellenar con datos, por lo que se reserva el resto de cada página como espacio disponible para seguir creciendo. Por ejemplo, si se especifica un valor de factor de relleno de 80, significa que el 20 por ciento de cada página de nivel de hoja se dejará vacío para proporcionar espacio para la expansión del índice a medida que se agreguen datos a la tabla subyacente. El espacio vacío se reserva entre las filas de índice en lugar de al final del índice.

El valor de factor de relleno es un porcentaje entre 1 y 100, y el valor predeterminado en el servidor es 0, lo que significa que las páginas de nivel de hoja se rellenan al máximo de su capacidad.

[!NOTA]

Los valores del factor de relleno 0 y 100 son idénticos.

Puede utilizar las instrucciones CREATE INDEX o ALTER INDEX para establecer el valor de factor de relleno para índices individuales. Para modificar el valor predeterminado del servidor, utilice el procedimiento almacenado del sistema sp_configure. Para ver el valor de factor de relleno de uno o varios índices, utilice sys.indexes.

Nota importanteImportante

El valor de factor de relleno sólo se aplica cuando se crea el índice o cuando se vuelve a generar. SQL Server Database Engine (Motor de base de datos de SQL Server) no mantiene dinámicamente el porcentaje especificado de espacio vacío en las páginas. Si se intenta mantener el espacio adicional en las páginas de datos, se anulará el objetivo del factor de relleno, dado que el Database Engine (Motor de base de datos) tendrá que realizar divisiones de página para mantener en cada página el porcentaje de espacio disponible especificado por el factor de relleno a medida que se escriben nuevos datos.

Consideraciones de rendimiento

Divisiones de páginas

Si el valor de factor de relleno se elige correctamente, se pueden reducir las posibles divisiones de página al proporcionarse espacio suficiente para la expansión del índice a medida que se agrega a la tabla subyacente. Cuando se agrega una fila nueva a una página de índice llena, Database Engine (Motor de base de datos) mueve aproximadamente la mitad de las filas a una página nueva para hacer espacio para la nueva fila. Esta reorganización se denomina división de página. Una división de página genera espacio para los nuevos registros, pero puede tardar en realizarse y es una operación que consume muchos recursos. Además, puede causar fragmentación que, a su vez, causa más operaciones de E/S. Cuando se llevan a cabo divisiones de páginas con frecuencia, el índice se puede volver a generar utilizando un valor de factor de relleno nuevo o existente para redistribuir los datos. Para obtener más información, vea Reorganizar y volver a generar índices.

Aunque si el valor del factor de relleno es bajo y distinto de cero, se puede reducir el requisito de dividir páginas a medida que crezca el índice, éste necesitará más espacio de almacenamiento y puede reducir el rendimiento de la lectura. Incluso en el caso de una aplicación pensada para realizar muchas operaciones de inserción y actualización, el número de lecturas de base de datos suele superar a las escrituras en un factor de 5 a 10. Por lo tanto, al especificar un factor de relleno distinto del predeterminado, se puede disminuir el rendimiento de las lecturas de base de datos en una cantidad inversamente proporcional al valor del factor de relleno. Por ejemplo, un valor de factor de relleno igual a 50 puede hacer que el rendimiento de las lecturas de base de datos se reduzca a la mitad. El rendimiento de las lecturas se reduce porque el índice contiene más páginas, con lo que se aumentan las operaciones de E/S de disco necesarias para recuperar los datos.

Agregar datos al final de la tabla

Un factor de relleno distinto de cero o de cien puede ser conveniente para el rendimiento si los datos nuevos se distribuyen uniformemente en toda la tabla. Sin embargo, si todos los datos se agregan al final de la tabla, el espacio vacío en las páginas de índice no se rellenará. Por ejemplo, si la columna de clave de índice es una columna IDENTITY, la clave de las nuevas filas siempre aumenta y las filas de índice se agregan lógicamente al final del índice. Si las filas existentes se van a actualizar con datos que hacen aumentar el tamaño de las filas, use un factor de relleno menor que 100. Los bytes adicionales en cada página ayudarán a reducir las divisiones de página ocasionadas por la longitud extra de las filas.