Facteur de remplissage

L'option de facteur de remplissage permet de paramétrer précisément les performances et le stockage des données d'index. Lorsqu'un index est créé ou régénéré, la valeur du facteur de remplissage détermine le pourcentage d'espace sur chaque page de niveau feuille à remplir de données, réservant ainsi le reste de chaque page comme espace disponible pour une croissance future. Par exemple, une valeur de facteur de remplissage de 80 signifie que 20 pour cent de chaque page de niveau feuille reste vide afin que les index puissent s'étendre à mesure que des données sont ajoutées à la table sous-jacente. L'espace vide est réservé entre les lignes d'index plutôt qu'à la fin de l'index.

La valeur du facteur de remplissage est un pourcentage de 1 à 100 et la valeur par défaut à l'échelle du serveur est 0, ce qui signifie que les pages de niveau feuille sont entièrement remplies.

Notes

Les valeurs du facteur de remplissage 0 et 100 sont identiques à tous les égards.

Vous pouvez utiliser les instructions CREATE INDEX ou ALTER INDEX pour définir la valeur du facteur de remplissage d'index individuels. Pour modifier la valeur par défaut à l'échelle du serveur, utilisez la procédure stockée système sp_configure. Pour afficher la valeur du facteur de remplissage d'un ou de plusieurs index, utilisez sys.indexes.

Important

Le paramètre du facteur de remplissage s'applique uniquement lorsque l'index est créé ou régénéré. Le Moteur de base de données SQL Server ne conserve pas dynamiquement le pourcentage spécifié d'espace libre dans les pages. Tenter de préserver l'espace supplémentaire sur les pages de données serait en opposition avec l'objectif initial du recours au facteur de remplissage car le Moteur de base de données devrait procéder à des fractionnements de pages afin de conserver le pourcentage d'espace disponible (déterminé par ce même facteur de remplissage) sur chaque page à mesure que des données sont entrées.

Considérations relatives aux performances

Fractionnements de pages

Une valeur de facteur de remplissage correctement choisie peut réduire les risques de fractionnements de pages en fournissant suffisamment d'espace pour l'extension des index à mesure que des données sont ajoutées à la table sous-jacente. Lorsqu'une nouvelle ligne est ajoutée à une page d'index complète, le Moteur de base de données déplace environ la moitié des lignes vers une nouvelle page afin de faire de la place pour la nouvelle ligne. Ce type de réorganisation est désigné par l'expression « fractionnement de pages ». Un fractionnement de pages fait de la place pour de nouveaux enregistrements, mais cette opération peut prendre du temps et est gourmande en ressources. En outre, il peut causer une fragmentation qui accroît les opérations d'E/S. Lorsque des fractionnements de pages se produisent fréquemment, vous pouvez régénérer l'index à l'aide d'une valeur de facteur de remplissage nouvelle ou existante afin de redistribuer les données. Pour plus d'informations, consultez Réorganisation et reconstruction d'index.

Bien qu'une faible valeur de facteur de remplissage, différente de 0, puisse réduire la nécessité de fractionner les pages à mesure que l'index s'étend, ce dernier a besoin de davantage d'espace de stockage et peut diminuer les performances de lecture. Même pour une application orientée vers de nombreuses opérations d'insertion et de mise à jour, le nombre de lectures effectuées dans la base de données est généralement 5 à 10 fois plus élevé que le nombre d'écritures. Par conséquent, la spécification d'un facteur de remplissage différent de la valeur par défaut peut diminuer les performances de lecture dans la base de données selon un coefficient inversement proportionnel au facteur de remplissage défini. Par exemple, un facteur de remplissage de 50 peut diminuer de moitié les performances de lecture dans la base de données. Les performances de lecture diminuent, car l'index contient davantage de pages, ce qui augmente le nombre d'opérations d'E/S disque nécessaires à la récupération des données.

Ajout de données à la fin de la table

Un facteur de remplissage différent de 0 ou 100 peut être bénéfique pour les performances si les nouvelles données sont réparties de manière égale dans l'ensemble de la table. Toutefois, si toutes les données sont ajoutées à la fin de la table, l'espace vide dans les pages d'index n'est pas rempli. Par exemple, si la colonne clé de l'index est une colonne IDENTITY, la clé des nouvelles lignes augmente sans cesse et les lignes d'index sont ajoutées logiquement à la fin de l'index. Si les lignes existantes sont mises à jour avec des données qui font augmenter la taille des lignes, utilisez un facteur de remplissage inférieur à 100. Les octets supplémentaires de chaque page permettent de réduire les fractionnements de pages provoqués par l'augmentation de la taille des lignes.