Paramètres de Ghost Cleanup

10

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é)

Ste Bov
la source

Réponses:

4

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

Non, il n'y en a pas. Au moins je ne sais pas pour l'instant :-)

s'il y a d'autres actions qui peuvent aider à cela

Du blog de Paul Randal - Une méthode que les gens envisagent parfois est de forcer le nettoyage des fantômes pour tout nettoyer en effectuant une analyse de table ou d'index (mettant ainsi en file d'attente tous les enregistrements supprimés pour la tâche de nettoyage des fantômes).

select * from [your_problem_table] with (index = Index_that_has_large_Deletes)

Y a-t-il une possibilité pour vous de partitionner la table et de purger l'ancienne partition au lieu de faire des suppressions ? Pour info .. SQL Server 2016 et versions ultérieures vous permettent également de tronquer des partitions individuelles.

En outre, vous pouvez (TEST et implémenter) - désactiver le nettoyage des fantômes (indicateur de trace 661) , puis l' rebuild index WITH ONLINE = ONoption puisque vous utilisez l'édition Enterprise.

Si vous utilisez AlwaysON (avec async) avec la réplication, assurez-vous d'activer l' indicateur de trace 1448 - permet au lecteur de journal de réplication d'avancer même si les réplicas secondaires asynchrones n'ont pas accusé réception de la modification.

Assurez-vous de lire Supprime les pages fractionnées et les fantômes transférés de Paul White pour voir si vos tables ont des déclencheurs ou des colonnes LOB qui ralentiraient.

Kin Shah
la source