-
Index et statistiques
Parmis les bonnes pratiques de gestion d'un serveur SQL, il faut que les index soient coorect (défragmenté) et lers statistique à jour.
Cependant, j'ai quelques questions à ce sujet.
Il existe un plan de maintenance qui permet de mettre à jour les statistiques et les index. Cependant, cette opération est gourmande en espace disque. La base de données étant en mode de récupération complet, cela fait accroître démesuérement la taille du fichier log.
Dès lors, pour pallier à ce problème, j'ai mis en place un job qui démargmente uniquement les index fragmentés.
C'est au niveau des statistiques que j'ai un soucis.
- Est-ce que la mise à jour d'un index met à jour la statistique associée ?
- Au niveau paramètre de la base de données, le flag "mise à jour automatique des statistiques" est positionné à ON. Pourtant, certaines statistiques ,ne sont pas à jour. Faut-il alors néanmoins passer par le plan de maintenance consistant à mettre à jour toutes les statistiques ?
- Au niveau paramètre de la base de données, faut-il mettre à jour les statistiques en temps réel ou de manière asynchrone ?
- Est-ce que le mode de récupération BULK LOGGED me permettrait d'échapper à l'inconvéniant de l'accroissement du log pendant la phase de défragmentation des bases de données ?
-
Bon, pour le mode BULK LOGGED, il y a une réponse sur ce site.
http://blog.developpez.com/mikedavem...ode-de-recupe/
-
1) statistiques : elles sont recalculées lorsque :
1.1 - vous faites une opération de reconstruction d'index (REBUILD) mais pas de défragmentation (DEFRAG, REORGANIZE)
1.2 - vous avez mis le paramètre de base de données AUTO_UPDATE_STATISTICS à ON, lorsqu'une demande de plan pouvant concerner cette statistique se rend compte de son obsolescence (seuil atteint)
1.3 - vous avez mis le paramètre de base de données AUTO_UPDATE_STATISTICS_ASYNC à ON (version Enterprise uniquement), lorsque le seuil d'obsolescence est atteint et qu'il a un ppeu de temps pour le faire (iddle)
1.4 - Manuellement si vous lancez la commande UPDATE STATISTICS ...
2) journalisation :
Les statistiques ne sont jamais journalisées, mais la création d'index oui.
En mode FULL la commande d'indexation et la totalité de l'arbre d'index sont écrit dans le journal. En mode BULK LOGGED ou SIMPLE seule la commande CREATE INDEX est journalisée mais pas les données ce qui économise énormément le volume du journal.
Vous pouvez passer d'un mode de journalisation à l'autre par à tout moment par le commande ALTER DATABASE ... SET RECOVERY { SIMPLE, BULK_LOGGED | FULL }
Enfin, il vaut mieux :
défragmenter les index si la fragmentation est de plus de 10% et moins de 30,
reconstruire les index si la fragmentation est de plus de 30%,
recalculer les stats sur un échentillon lorsque la table est grande (plus de 10000 pages par exemple).
A +
-
Et enfin utiliser l'option WITH COLUMNS de l'instruction UPDATE STATISTICS sans quoi vous perdez le bénéfice de la reconstruction des index.
En effet dans ce cas, le taux d'échantillonnage est de 100%.
Si vous faites un UPDATE STATISTICS sans l'option WITH COLUMNS, toutes les statistiques prennent le même taux d'échantillonnage, qui pour les très grosses tables est faible.
@++ ;)
-