J'exécute une base de données transactionnelle élevée (~ 175 000 transactions / minute en moyenne, près de 9 millions d'enregistrements par heure ajoutés et supprimés)
Jusqu'à récemment, cela n'a pas été trop un problème car nous avons été à environ 7,5 millions d'enregistrements ajoutés et supprimés, mais avec les derniers afflux de données, le nettoyage des fantômes ne semble pas être en mesure de suivre le nettoyage du espace inutilisé sur les tables / index.
Il y a quelques jours, nous avons atteint 53 Go d'``espace inutilisé '' sur 16 tables (principalement 2 d'entre eux), de sorte que nous avons commencé à examiner le processus de nettoyage des fantômes pour le voir s'exécuter toutes les 5 secondes et sur 10 pages.
Ma solution actuelle est que tôt le matin, j'exécute trois threads de la commande suivante:
DECLARE @2hours datetime = dateadd(hour,2,getutcdate())
WHILE getutcdate() < @2hours
BEGIN
DBCC FORCEGHOSTCLEANUP ('DBNAME') WITH NO_INFOMSGS
END
pour rattraper le retard de la veille (lorsque la plupart de nos suppressions ont lieu)
Je me demande s'il existe un moyen de modifier les paramètres par défaut de 5 secondes et 10 pages pour dire chaque seconde ou exécuter plus de 20 pages, y a-t-il un moyen de le faire ou dois-je continuer à tourner plusieurs processus de nettoyage pour effacer le données, ou s'il y a d'autres actions qui peuvent aider à cette
La réindexation s'exécute au moins une fois par semaine sur la plupart des index effectués (la plupart le sont tous les deux jours)
SQL Server 2012 Enterprise SP3_CU8 (mise à niveau vers CU9 demain) sur AlwaysOn High Availabilty Cluster également avec réplication (distribution sur un serveur séparé)
la source