Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Conseils pour réparer la fragmentation de l'index SQL Server

La fragmentation des index SQL Server est une source courante de dégradation des performances de la base de données. La fragmentation se produit lorsqu'il y a beaucoup d'espace vide sur une page de données (fragmentation interne) ou lorsque l'ordre logique des pages dans l'index ne correspond pas à l'ordre physique des pages dans le fichier de données (fragmentation externe).

Les problèmes de performances liés à la fragmentation sont le plus souvent observés lors de l'exécution de requêtes qui effectuent des analyses d'index. Les requêtes qui effectuent des recherches d'index peuvent ne pas être affectées par une fragmentation d'index élevée.

Comprendre les types de fragmentation d'index SQL Server

Fragmentation des index internes

La fragmentation interne se produit lorsque les pages de données ont trop d'espace libre. Cet espace supplémentaire est introduit de différentes manières :

  • SQL Server stocke les données sur des pages de 8 Ko. Ainsi, lorsque vous insérez moins de 8 Ko de données dans un tableau, il vous reste un espace vide sur la page.
  • Inversement, si vous insérez plus de données que la page ne peut en contenir, l'excédent est envoyé vers une autre page. Il est peu probable que les données supplémentaires remplissent parfaitement les pages suivantes, vous vous retrouvez donc, encore une fois, avec un espace vide sur une page.
  • Un espace vide sur une page de données se produit également lorsque des données sont supprimées d'un tableau.

La fragmentation interne provoque principalement des problèmes de performances lorsque SQL Server effectue une analyse d'index. Les performances ralentissent lorsque SQL Server doit analyser de nombreuses pages partiellement remplies pour trouver les données qu'il recherche.

Fragmentation des index externes

La fragmentation externe résulte du désordre des pages de données. Cela est dû à l'insertion ou à la mise à jour de données dans des pages complètes. Lorsque des données sont ajoutées à une page complète, SQL Server crée une division de page pour accueillir les données supplémentaires, et la nouvelle page est séparée de la page d'origine.

La fragmentation externe entraîne des problèmes de performances en augmentant les E/S aléatoires. Lorsque les pages ne sont pas séquentielles, SQL Server doit lire les données à partir de plusieurs emplacements, ce qui prend plus de temps que la lecture dans l'ordre.

Comment éviter la fragmentation de l'index SQL Server

Il n'est pas possible d'empêcher complètement la fragmentation des index, mais il existe des moyens de minimiser son occurrence et d'atténuer l'effet de la fragmentation sur les performances de la base de données. Voici quelques choses à faire et à ne pas faire pour éviter la fragmentation des index SQL Server :

FAIRE : Choisissez des clés de cluster qui sont des valeurs toujours croissantes ou des valeurs toujours décroissantes. Cela réduira les fractionnements de page car lorsque vous insérez des enregistrements, ils seront placés au début ou à la fin de la chaîne de pages logiques.

À NE PAS FAIRE : Insérez des enregistrements avec des valeurs de clé aléatoires. Choisissez des valeurs de clé statiques afin qu'une fois qu'un enregistrement est placé, il n'aura jamais à se déplacer et ne sera pas hors service.

À NE PAS FAIRE : Mettez à jour les enregistrements pour les allonger. L'ajout d'enregistrements à un index lors d'une mise à jour peut obliger SQL Server à pousser certaines des données vers une nouvelle page. Cela peut entraîner des pages feuilles non séquentielles et, éventuellement, des problèmes de performances.

À NE PAS FAIRE : Mettre à jour les colonnes de clé d'index. Les mises à jour de colonne de clé nécessitent une suppression de ligne complète suivie d'une insertion de ligne complète à l'aide de la nouvelle valeur de clé. Si la nouvelle ligne est insérée sur une page sans suffisamment d'espace, vous obtiendrez une division de page.

FAIRE : Soyez conscient des fonctionnalités qui peuvent provoquer des fractionnements de page. Gardez à l'esprit les résultats finaux potentiels de la modification de toute fonctionnalité impliquant des index. Par exemple, la mise à jour de colonnes à largeur variable (même dans des colonnes non clés) dans un index clusterisé peut entraîner des fractionnements de page.

FAIRE : Mettre en œuvre des facteurs de remplissage d'index appropriés. Analysez la fragmentation au paramètre de facteur de remplissage par défaut et ajustez-le au besoin pour minimiser la fragmentation excessive à charge normale.

Comment réparer la fragmentation de l'index SQL Server

Étant donné qu'il est impossible d'empêcher la fragmentation à 100 % du temps, il est important de savoir comment corriger la fragmentation de l'index SQL Server si les performances en souffrent.

Avant de pouvoir décider comment aborder votre problème de fragmentation d'index SQL Server, vous devez d'abord déterminer l'ampleur du problème auquel vous êtes confronté.

Le meilleur endroit pour commencer est d'utiliser le DMF sys.dm_db_index_physical_stats pour analyser le niveau de fragmentation de vos index. Une fois que vous connaissez l'étendue de la fragmentation de l'index, vous pouvez tracer votre plan d'attaque avec l'une des trois solutions :reconstruire l'index, réorganiser l'index ou ne rien faire.

Reconstruire : Reconstruire les index lorsque la fragmentation atteint plus de 30 %.

Réorganiser : Réorganisez les index avec une fragmentation comprise entre 11 et 30 %.

Ignorer : Des niveaux de fragmentation de 10 % ou moins ne devraient pas poser de problème de performances, vous n'avez donc rien à faire.

La fragmentation des index SQL Server est inévitable, mais vous pouvez minimiser les effets négatifs de la fragmentation sur les performances de la base de données. Suivez quelques bonnes pratiques simples et restez au courant de la maintenance planifiée pour atténuer tout problème de performances majeur lié à la fragmentation.