Ghost Cleanup ayarları


10

Yüksek bir işlem veritabanı çalıştırıyorum (ortalama ~ 175 bin işlem / Dakika, saatte neredeyse 9 milyon kayıt eklendi ve kaldırıldı)

Yakın zamana kadar, ~ 7.5M kayıtlarında eklediğimiz ve kaldırdığımız için bu çok fazla bir sorun değildi, ancak en son veri akışlarıyla hayalet temizliği, tablolarda / dizinlerde kullanılmayan alan.

Birkaç gün önce 16 tabloda (çoğunlukla 2 tanesi) 53 GB 'Kullanılmayan Alan' değerine ulaştık, böylece sonuç her 5 saniyede bir çalıştığını ve 10 sayfadan fazla çalıştığını bulmak için hayalet temizleme sürecine bakmaya başladı.

Şu anki çözümüm sabahın erken saatlerinde şu komutun üç iş parçacığını çalıştırıyorum:

DECLARE @2hours datetime = dateadd(hour,2,getutcdate())

WHILE getutcdate() < @2hours
BEGIN
    DBCC FORCEGHOSTCLEANUP ('DBNAME') WITH  NO_INFOMSGS
END

önceki geceden birikmiş işler yakalamak için (silme işlemlerinin çoğu gerçekleştiğinde)

Her saniye söylemek için varsayılan ayarları 5 saniye ve 10 sayfadan değiştirmek veya 20 sayfadan fazla çalıştırmak için herhangi bir yol olup olmadığını merak ediyorum, bunu yapmanın herhangi bir yolu var mı? veya bu konuda yardımcı olabilecek başka işlemler varsa

Yeniden endeksleme en çok etkilenen endekslerde haftada en az bir kez çalışır (çoğu her gün)

Çoğaltma ile birlikte AlwaysOn Yüksek Kullanılabilirlik Kümesi'nde SQL Server 2012 Enterprise SP3_CU8 (yarın CU9'a yükseltme) (ayrı bir sunucuda dağıtım)

Yanıtlar:


4

Varsayılan ayarları her saniyede 5 saniye ve 10 sayfa olarak değiştirmenin veya 20 sayfadan fazla çalışmanın herhangi bir yolu olup olmadığını merak ediyorum

Hayır, yok. En azından şu andan itibaren bilmiyorum :-)

buna yardımcı olabilecek başka eylemler varsa

Paul Randal'ın blogundan - İnsanların bazen düşündüğü bir yöntem, bir tablo veya dizin taraması gerçekleştirerek hayalet temizlemeyi her şeyi temizlemeye zorlamaktır (böylece silinen tüm kayıtları hayalet temizleme görevi için sıraya koymak).

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

Silmek yerine tabloyu bölümleme ve eski bölümü temizleme olasılığınız var mı ? FYI .. SQL Server 2016 ve üstü bölümleri ayrı ayrı da kesmenizi sağlar.

Ayrıca şunları yapabilirsiniz (TEST ve uygulamak) - devre dışı hayalet temizleme (izleme bayrağı 661) ve daha sonra rebuild index WITH ONLINE = ONsize Enterprise sürümünü kullanıyorsanız beri seçeneği.

Çoğaltma ile AlwaysON (eşzamansız) kullanıyorsanız, İzleme bayrağı 1448'i etkinleştirdiğinizden emin olun - eşzamansız ikincil eşlemeler bir değişikliğin alındığını kabul etmemiş olsa bile çoğaltma günlüğü okuyucusunun ileri hareket etmesine izin verir.

Tablolarınızın yavaşlayabilecek tetikleyicilere veya LOB sütunlarına sahip olup olmadığını görmek için Paul White'dan Sayfaları ve İletilen Hayaletleri Siler'i okuduğunuzdan emin olun .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.