Comment savoir quand il est temps de défragmenter ma base de données SQLServer?

9

Quelle est la meilleure pratique pour mesurer la fragmentation / baisse des performances de la base de données SQLServer et déterminer quand défragmenter une table de base de données SQLServer?

Je suis le plus intéressé à savoir quelles sont les mesures utiles et quel niveau de dégradation des performances devrait déclencher la défragmentation.

Jeff Leonard
la source

Réponses:

22

Je suis sûr qu'il y aura des réponses intéressantes à cela, car il y a beaucoup de désaccord sur les mesures à examiner. J'ai écrit DBCC INDEXDEFRAG, SHOWCONTIG et conçu leurs remplacements pour 2005, plus écrit le contenu de Books Online, donc je vais vous donner mon avis et expliquer les chiffres dans Books Online et l'assistant de plan de maintenance pour 2005, que j'ai choisi.

Les deux meilleures mesures à examiner pour la fragmentation d'index sont: 1) (2005) fragmentation moyenne en pourcentage / (2000) fragmentation de l'analyse logique 2) (2005) densité de page moyenne / (2000) octets moyens gratuits par page

Ceux-ci s'appliquent également aux index cluster et non cluster.

1 mesure le degré de fragmentation logique. C'est lorsque l'ordre logique des pages au niveau feuille d'un index ne correspond pas à l'ordre physique. Cela empêche le moteur de stockage d'effectuer une lecture anticipée efficace pendant les analyses de plage. Ainsi, le n ° 1 affecte les performances d'analyse de plage, et non les performances de recherche singleton.

2 mesure la quantité d'espace perdu sur chaque page au niveau des feuilles d'un index. L'espace gaspillé signifie que vous utilisez plus de pages pour stocker les enregistrements, ce qui signifie plus d'espace disque pour stocker l'index, plus d'E / S pour lire l'index et plus de mémoire pour conserver les pages en mémoire dans le pool de tampons.

Seuils? Ma règle générale est de moins de 10% de fragmentation, ne faites rien. 10-30%, faites un ALTER INDEX ... REORGANIZE (2005) / DBCC INDEXDEFRAG (2000). Plus de 30%, faites un ALTER INDEX ... REBUILD (2005) / DBCC DBREINDEX (2000). Ce sont des généralisations complètes et les seuils pour vous varieront.

Pour trouver vos seuils, effectuez un suivi des performances de la charge de travail par rapport aux niveaux de fragmentation et décidez quand la dégradation des performances est trop importante. À ce stade, vous aurez besoin pour résoudre la fragmentation. Il y a un équilibre entre vivre avec la fragmentation et prendre le coup de la suppression.

Je n'ai pas abordé ici les compromis entre les deux méthodes de suppression de la fragmentation, des choses comme FILLFACTOR / PADINDEX pour essayer d'atténuer la fragmentation et faire moins de défragmentation, des modifications de schémas / modèles d'accès pour atténuer la fragmentation, ou différents types de plans de maintenance .

Oh, btw, je recommande toujours de ne pas se soucier de la fragmentation des index de moins de 1000 pages. C'est parce que l'index réside probablement principalement dans la mémoire (et parce que les gens ont demandé un nombre et j'ai dû en trouver un).

Vous pouvez en savoir plus à ce sujet dans mon article TechNet Magazine sur la maintenance des bases de données à http://technet.microsoft.com/en-us/magazine/cc671165.aspx , dans le livre blanc de 2000 sur les meilleures pratiques de défragmentation d'index que j'ai aidé à rédiger sur http://technet.microsoft.com/en-us/library/cc966523.aspx , et sur mon blog sous la catégorie Fragmentation à http://www.sqlskills.com/BLOGS/PAUL/category/Fragmentation.aspx .

J'ai un peu trop répondu à cette question, je pense, mais c'est l'un de mes raccourcis. J'espère que cela t'aides :-)

Paul Randal
la source