Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Hayalet temizleme, Veri Değiştirme Deyimleri (DML) tarafından silinmek üzere işaretlenmiş satırları fiziksel olarak kaldıran bir arka plan işlemidir. Aşağıdaki makalede bu işleme genel bir bakış sunulmaktadır.
Hayalet satırlar
Bir dizinin yaprak düzeyi sayfalarından silinen satırlar fiziksel olarak sayfadan kaldırılmaz. Bunun yerine, satır gelecekte kaldırılmak üzere işaretlenir veya gölgelenir. Bu, satırın sayfada kaldığı ancak satırın hayalet olduğunu belirtmek için satır üst bilgisinde biraz değiştirildiği anlamına gelir. Bunun amacı, silme işlemi sırasında performansı iyileştirmektir. Hayaletler, satır düzeyi kilitleme ve veritabanı altyapısının eski satır sürümlerini koruması gereken anlık görüntü yalıtım işlemleri için gereklidir.
Hayalet temizleme görevi
Silinmek üzere işaretlenen veya gölgelendirilen satırlar, artık gerekli olmadığında arka plan hayalet temizleme işlemi tarafından temizlenir. Hayalet temizleme düzenli aralıklarla çalışır ve herhangi bir sayfada hayalet satır olup olmadığını denetler. Eğer bir şey bulursa, bu satırları fiziksel olarak kaldırır. Veritabanı Altyapısı örneğindeki tüm veritabanları için tek bir hayalet temizleme iş parçacığı vardır.
Bir satır hayaletlendiğinde, veritabanı hayalet girişlere sahip olarak işaretlenir. Hayalet temizleme işlemi yalnızca bu tür veritabanlarını tarar. Hayalet temizleme işlemi, tüm hayaletli satırlar kaldırıldıktan sonra veritabanını hayaletli satırlara sahip değil olarak işaretler ve bir sonraki çalıştırmada bu veritabanını atlar. Bu işlem, veritabanında paylaşılan bir kilit alamıyorsa herhangi bir veritabanını da atlar. Bir sonraki çalıştırdığında veritabanında kilit edinimini yeniden dener.
Aşağıdaki sorgu, veritabanındaki hayaletli satırların yaklaşık sayısını döndürür.
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;
Hayalet temizlemeyi devre dışı bırakma
Yüksek yüklü sistemlerde birçok silme işlemi varsa ve hayalet satırlara sahip diğer sayfaların sık erişilen sayfaların birçoğu yerine önbellek havuzunda yer alması durumunda, hayalet temizleme işlemi performansı düşürebilir. Sonuç olarak, sık erişilen sayfaların diskten yeniden okunması, ek disk G/Ç oluşturması ve sorgu gecikme süresini artırması gerekir. Bu durumda, izleme bayrağı 661 kullanarak hayalet temizlemeyi devre dışı bırakabilirsiniz.
Hayalet temizleme olmadan veritabanınız gereksiz ölçüde büyüyebilir ve bu da fazladan G/Ç ve bellek tüketimi nedeniyle performansı düşürebilir. Hayalet temizleme işlemi hayalet olarak işaretlenmiş satırları kaldırdığından, işlemin devre dışı bırakılması bu satırları sayfada bırakır ve veritabanı altyapısının bu alanı yeniden kullanmasını önler. Bu, veritabanı altyapısını bunun yerine yeni sayfalara veri eklemeye zorlayarak şişirilmiş veritabanı dosyalarına yol açar ve sayfa bölmelerine de neden olabilir. Sayfa bölmeleri disk G/Ç'sini artırarak sorgu performansını düşürebilir. Hayalet temizleme devre dışı bırakılırsa veritabanında alan tükenebilir.
Uyarı
Hayalet temizleme işleminin kalıcı olarak devre dışı bırakılması önerilmez.
Hayalet temizleme devre dışı bırakıldığında hayalet satırları kaldırmak için satırların silindiği tablolardaki dizinleri yeniden oluşturun. Dizini yeniden oluşturmak, mevcut verilerden yeni sayfalar oluşturur ve işlemdeki hayalet satırları atlar.