Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le nettoyage fantôme est un processus en arrière-plan qui supprime physiquement les lignes marquées pour suppression par les instructions DML. L’article suivant fournit une vue d’ensemble de ce processus.
Lignes fantômes
Les lignes supprimées des pages de niveau feuille d’un index ne sont pas physiquement supprimées de la page. Au lieu de cela, la ligne est marquée pour une suppression future, ou brouillée. Cela signifie que la ligne reste sur la page, mais un indicateur est modifié dans l’en-tête de ligne pour signaler que la ligne est un fantôme. Ceci a pour but d’optimiser les performances durant une opération de suppression. Les fantômes sont nécessaires pour le verrouillage au niveau des lignes et pour les transactions d’isolation des captures instantanées où le moteur de base de données doit conserver des versions de lignes plus anciennes.
Tâche de nettoyage fantôme
Les lignes marquées pour suppression ou fantômes sont épurées par le processus de nettoyage fantôme en arrière-plan lorsqu’elles ne sont plus nécessaires. Le nettoyage fantôme s’exécute régulièrement et vérifie si des pages ont des lignes fantômes. S’il en trouve, il supprime physiquement ces lignes. Il existe un thread de nettoyage fantôme unique pour toutes les bases de données sur une instance du moteur de base de données.
Lorsqu’une ligne est masquée, la base de données est marquée pour contenir des entrées masquées. Le processus de nettoyage fantôme analyse uniquement ces bases de données. Le processus de nettoyage fantôme marque également la base de données comme n’ayant aucune ligne fantôme une fois que toutes les lignes fantômes sont supprimées et ignore cette base de données la prochaine fois qu’elle s’exécute. Le processus ignore également toute base de données si elle ne peut pas acquérir de verrou partagé sur la base de données. Il retente l’acquisition de verrous sur la base de données la prochaine fois qu’elle s’exécute.
La requête suivante retourne un nombre approximatif de lignes fantômes dans une base de données.
SELECT SUM(ghost_record_count) AS total_ghost_records,
DB_NAME(database_id) AS database_name
FROM sys.dm_db_index_physical_stats(NULL, NULL, NULL, NULL, 'SAMPLED')
GROUP BY database_id
ORDER BY total_ghost_records DESC;
Désactiver le nettoyage fantôme
Dans les systèmes à charge élevée avec de nombreuses suppressions, le processus de nettoyage fantôme peut réduire les performances car il remplace beaucoup de pages fréquemment consultées dans la mémoire tampon par d’autres pages qui ont des lignes fantômes. Par conséquent, les pages fréquemment consultées doivent être recréées à partir du disque, ce qui génère des E/S de disque supplémentaires et augmente la latence des requêtes. Si cela se produit, vous pouvez désactiver le nettoyage fantôme à l’aide de l’indicateur de trace 661.
Sans nettoyage fantôme, votre base de données peut augmenter inutilement, ce qui peut également réduire les performances en raison d’une consommation supplémentaire d’E/S et de mémoire. Étant donné que le processus de nettoyage fantôme supprime les lignes marquées comme fantômes, la désactivation du processus laisse ces lignes sur la page, ce qui empêche le moteur de base de données de réutiliser cet espace. Cela force le moteur de base de données à ajouter des données à de nouvelles pages, ce qui entraîne des fichiers de base de données gonflés et peut également entraîner des fractionnements de pages. Les fractionnements de page augmentent les E/S de disque, ce qui peut réduire les performances des requêtes. Si le nettoyage fantôme est désactivé, la base de données peut manquer d’espace.
Avertissement
La désactivation définitive du processus de nettoyage fantôme n’est pas recommandée.
Pour supprimer les lignes fantômes lorsque le nettoyage fantôme est désactivé, régénérez les index sur les tables où les lignes ont été supprimées. La reconstruction d’un index crée de nouvelles pages à partir de données existantes, tout en omettant les lignes fantômes.