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 un porcentaje de espacio libre para el crecimiento futuro. 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 de cada página en lugar de al final de la página.

El valor de factor de relleno es un porcentaje. El valor predeterminado 0 para todo el servidor es la opción óptima en la mayoría de situaciones. Cuando se establece 0 como factor de relleno, el nivel de hoja se rellena al máximo de su capacidad.

[!NOTA] Los valores de factor de relleno 0 y 100 son idénticos en todos los aspectos.

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 más índices, utilice la vista de catálogo sys.indexes.

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

Consideraciones de rendimiento

Divisiones de página

Un valor de factor de relleno elegido correctamente puede reducir las posibles divisiones de páginas, proporcionando espacio suficiente para la expansión del índice a medida que se agreguen datos a la tabla subyacente.

Cuando se agrega una fila nueva a una página de índice completa, Database Engine (Motor de base de datos) mueve a una nueva página la mitad de las filas, aproximadamente, con el fin de que haya 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 frecuentes, 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 un valor de factor de relleno bajo, que no sea 0, 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 lectura. Incluso para una aplicación que está pensada para usar muchas operaciones de actualización e inserción, el número de lecturas de base de datos suele superar en número al de escrituras en un factor de 5 a 10. Por consiguiente, al especificar un factor de relleno distinto del valor predeterminado, puede disminuirse el rendimiento de la base de datos en una cantidad inversamente proporcional al valor del factor de relleno. Por ejemplo, un valor de factor de relleno de 50 puede hacer que el rendimiento de lectura de la base de datos se reduzca a la mitad. El rendimiento de lectura 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 puede ser adecuado para el rendimiento si los nuevos datos están distribuidos uniformemente en la tabla. Sin embargo, si todos los datos se agregan al final de la tabla, el espacio vacío no se rellenará. Por ejemplo, si la columna de clave de índice es una columna IDENTITY, la clave para las filas nuevas siempre está aumentando y las filas se agregan lógicamente al final de la tabla. En este escenario, las divisiones de página no producirán la disminución del rendimiento. Debería utilizar el factor de relleno predeterminado de 0 o especificar un factor de relleno igual a 100 para que el nivel de hoja se rellene.

Vea también

Conceptos

Crear índices (motor de base de datos)
fill factor (opción)

Otros recursos

ALTER INDEX (Transact-SQL)
CREATE INDEX (Transact-SQL)
sys.indexes (Transact-SQL)
sp_configure (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005