Bonjour à tous,
Je travaille en ce moment sur un projet avec une Base SQL Server qui vient d’être upgrade de 2008 à 2012 et malheureusement, nous d'avons pas de DBA dans l'équipe...
On a pas mal de problème de performance sur notre base alors que la machine en elle même est surdimensionné d'après notre architecte.
Je suis en train de suivre la piste des index :
Pour le moment, on a 45Go de données sur notre base + 100 Go d'index. Ce qui me parait carrément aberrant.
Je me demandais s'il y avait des habitudes à prendre au niveau des index afin d'améliorer les perfs sans pour autant avoir 2 fois plus d'index que de données...
On a récemment passé un script pour réorganiser les index avec une fragmentation entre 6% et 30%, et on a reconstruit ceux >30%.
On a créé tous les index manquants avec comme condition :
CAST((ddmigs.user_seeks + ddmigs.user_scans) * ddmigs.avg_user_impact AS INT) > 100
avec
sys.dm_db_missing_index_group_stats AS ddmigs
Ce sont des scripts qu'on a plus ou moins récupérer sur le net, mais bon, pourquoi 6% ? pourquoi 30 % ? Pourquoi >100 ? Je ne sais pas trop, j'espérais justement que vous puissiez m'aider la dessus.
Auriez-vous des recommandations à ces sujets ?
- Comment faire pour supprimer les index inutiles ? La table "dm_db_missing_index_group_stats" donne de bonne infos, mais à partir de quand est-ce qu'un index est réellement à considérer comme inutile ? Et comment savoir la taille en Mo que prennent ces index ?
J'envisageais de partir sur une suppression des index avec comme condition :
WHERE (IUS.user_seeks + IUS.user_scans + IUS.user_lookups) <= 1
avec
dm_db_index_usage_stats AS IUS
Par contre, je n'arrive pas à savoir à l'avance l'espace disque que cela me fera gagner.
- Faut-il reconstruire les index régulièrement, genre toutes les nuits ? Si oui quels paliers faut-il utiliser ?
- D'autres choses indispensables à savoir ?
Merci d'avance pour votre aide
Partager