Quand dois-je reconstruire les index dans ma base de données relationnelle (SQL Server)?
Est-il opportun de reconstruire les index régulièrement?
sql-server
index-maintenance
Nick Chammas
la source
la source
Réponses:
Au risque d’être trop général dans ma réponse, je dirai que vous devez exécuter un processus de maintenance d’index régulièrement. Cependant, votre processus de maintenance des index doit uniquement reconstruire / réorganiser les index qui en ont spécifiquement besoin.
Cela pose la question suivante: quand un index doit-il être reconstruit ou réorganisé? Rolando l'a bien dit. Encore une fois, je risque d’être extrêmement large. Un index nécessite une maintenance lorsque le niveau de fragmentation nuit aux performances. Ce niveau de fragmentation peut varier en fonction de la taille et de la composition de l’indice.
Parlant pour SQL Server, j’ai tendance à choisir une taille d’index et un niveau de fragmentation de l’index auquel je commence à effectuer la maintenance des index. Si un index contient moins de 100 pages, je n’effectue aucune maintenance.
Si un index est fragmenté entre 10% et 30%, je vais
REORGANIZE
l'index etUPDATE
les statistiques. Si un index est fragmenté à plus de 30%, je le feraiREBUILD
- sansUPDATE STATISTICS
, car le fichier le prend en chargeREBUILD
. Rappelez-vous cependant qu'une reconstruction ne met à jour que l'objet de statistiques directement associé à l'index. Les autres statistiques de colonne devront être gérées séparément.Cette réponse est vraiment juste un long chemin à dire: Oui, vous devriez faire la maintenance de routine des index, mais seulement sur les index qui en ont besoin.
la source
Vous devez reconstruire les index lorsqu'ils deviennent extrêmement fragmentés par des événements spéciaux. Par exemple, vous effectuez un important chargement en bloc de données dans une table indexée.
Alors, que se passe-t-il si vos index sont en train de se fragmenter régulièrement en raison d’une activité régulière? Devez-vous planifier des reconstructions régulières? À quelle fréquence doivent-ils courir?
Tom Kyte , dans ce fil classique Ask Tom , recommande:
La logique ici est bonne, mais elle est biaisée contre un profil de charge lourd en lecture.
Un index "gras" (c’est-à-dire comportant beaucoup d’espaces vides) garde en effet une bonne quantité de place pour les nouvelles lignes et les lignes déplacées, réduisant ainsi le fractionnement des pages et préservant la rapidité de vos écritures. Cependant, lorsque vous lisez à partir de cet index de graisse, vous devez lire plus de pages pour obtenir les mêmes données, car vous parcourez maintenant davantage d'espace vide. Cela ralentit vos lectures.
Ainsi, dans les bases de données lues, vous souhaitez reconstruire ou réorganiser régulièrement vos index. (À quelle fréquence et dans quelles conditions? Matt M a déjà une réponse concrète à cette question.) Dans les bases de données dont l'activité en lecture et en écriture est à peu près équivalente, ou dans des bases de données très chargées en écriture, vous risquez de nuire aux performances de votre base de données en reconstruisant les index. régulièrement.
la source
La plupart des gens les reconstruisent régulièrement afin qu'ils ne soient jamais fragmentés. Lorsque vous avez besoin de les reconstruire, cela dépend de la rapidité avec laquelle ils se fragmentent. Certains index devront être reconstitués souvent, d'autres en principe jamais. Consultez le script que SQLFool a mis en place et qui gère beaucoup de choses à comprendre pour vous.
la source
Comme indiqué dans la réponse acceptée de Matt M, une règle commune est que les index fragmentés à plus de 30% doivent être reconstruits.
Cette requête vous aidera à trouver combien d'index sont fragmentés à plus de 30% (si vous en avez, vous devez les reconstruire):
la source
Lorsque le pourcentage de fragmentation de l'index est supérieur à 30%.
Cela n’existe pas, mais en général, la maintenance d’Index une fois par semaine au cours du week-end est la meilleure pratique pour préserver la stabilité de l’environnement.
Je recommanderais d'utiliser des scripts de maintenance de Ola Hallengren (meilleurs scripts de maintenance), de personnaliser les scripts en fonction de votre environnement et de les programmer pour qu'ils s'exécutent le week-end.
https://ola.hallengren.com/
Remarque: n'oubliez pas de mettre à jour les statistiques après la reconstruction des index, car la reconstruction des index ne met pas à jour toutes les statistiques.
la source
Comme avec la plupart des choses en informatique, cela dépend. Quel problème essayez-vous de résoudre en reconstruisant les index? Pouvez-vous montrer que cela résout réellement le problème? Si tel est le cas, modifiez les chiffres jusqu'à ce que vous trouviez le moins de maintenance possible pour résoudre le problème.
Si cela ne résout pas le problème ou si vous le faites uniquement pour apaiser une mesure que vous surveillez, car cela pourrait améliorer les choses, tout ce que vous faites est de brûler du processeur et des E / S, voire d'aggraver votre problème.
Certains prétendent que la résolution du problème ne fera aucune différence sur votre serveur. Cela vaut-il la peine de le faire régulièrement?
https://www.brentozar.com/archive/2017/12/index-maintenance-madness/
http://brentozar.com/go/defrag
la source