[SQL Server] Performance tuning : intérêt du paramétrage du fill factor

Ce billet présente très brièvement le fill factor (ou facteur de remplissage) sous SQL Server.

Présentation élémentaire du fill factor

Bien que cela n’est pas toujours évitant de contrôler le remplissage des pages allouées à un index au sein d’une table contenant de très nombreux indexes, il est quand même important de mesurer l’importance d’un fill factor (ou facteur de remplissage). En effet, le fill factor est une valeur qui détermine le pourcentage d’espace sur chaque page de niveau feuille d’un index devant être rempli de données.

Si le fill factor d’un index est élevé (i.e., valeur comprise entre 80 et 100), le remplissage des pages d’un index se fera rapidement, augmentant ainsi sa taille et son pourcentage de fragmentation. Si le fill factor est bas (valeur comprise entre 50 et 70), le remplissage des pages se fera lentement.

Il faut savoir, ici, que du point de vue de SQL Server, 0 équivaut à 100, 10 équivaut à 90, 20 équivaut à 80,…, 50 équivaut à 50. De ce fait, si le fill factor d’un index est paramétré à 100, c’est comme s’il était paramétré à 0.

La valeur par défaut du fill factor est de 0 (et donc 100), ce qui permet à SQL Server de remplir toutes les pages de niveau feuille d’un index avec le maximum de lignes qu’il peut contenir.

Quelle valeur de fill factor est la mieux adaptée ?

Le fait qu’un fill factor ait une valeur élevée (0, 100, par exemple) n’est pas forcément un worst-practice, tout comme le fait qu’il ait une valeur basse (50, 60, par exemple)… sauf si bien sûr, que ce soit dans le cas d’un fill factor élevé ou celui bas, la valeur est mal appliquée à l’index concerné.

Pour mieux se situer :

  • Un fill factor bas est plus adapté aux indexes fortement utilisés pour des mises-à-jour (INSERT, UPDATE, DELETE).
  • Un fill factor élevé est plus adapté aux indexes fortement utilisés en lecture (SELECT).

Etant donné la complexité du problème (une base de données peut contenir des millions d’indexes, par exemple), il est souvent intéressant de couper la poire en deux en changeant la valeur par défaut du fill factor (qui est 0, donc 100, pour rappel) de toute la base de données en lui affectant une valeur aux alentours de 80, ce qui est un bon compromis.

Pour aller plus loin…

Vous pouvez jeter un coup d’œil ici, pour comprendre l’architecture d’un index. Ou , pour avoir un exemple de paramétrage du fill factor d’une instance OLTP SQL Server.

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s