14 Mart 2014 Cuma

DBCC CHECKDB kullanımı

DBCC CHECKDB'yi bir üretim ortamında kullanmanın pek de akıllıca olmadığını muhtemelen zaten görmüşsünüzdür veya bu yazıyla görüyorsunuz.

Bunu önceden biliyor olun veya yeni öğreniyor olun, eğer bu öğüdün içini doldurmadıysanız bu öneriyi kulak arkası edeceğiniz zamanlar da olacaktır.

Bu nedenle bu konuda size bir fikir vermek istedim! Test ortamlarımın birinde, sistem kaynaklarıyla ilgili bir test yaparken, testte DBCC CHECKDB'yi kullanmak istedim; çünkü bu komutun ne kadar kaynak canavarı olduğunun gayet farkındayım!

Öncelikle test ortamımdaki SQL Server Instance'ının doğru miktarda RAM kullandığından ve İşletim Sistemine ve diğer uygulamalara da yeterli RAM bıraktığımdan emin oldum.


SQL Server Instance'ının Max Server Memory ve Min Server Memory ayarlarını 6.144MB yaptım.


EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'max server memory (MB)', 6144
EXEC sp_configure 'min server memory (MB)', 6144
RECONFIGURE
EXEC sp_configure 'show advanced options', 0
RECONFIGURE


Yapmak istediğim test özellikle RAM hakkındaydı, bu kapsamda SQL Server servisini yeniden başlattım, Performance Monitor'ü açtım, özellikle SQL Server:Memory Manager'daki Target Server Memory (KB) ve Total Server Memory (KB) sayaçlarına diktim gözümü.

Performance Monitor, SQL Server: Memory Manager object
Hemen bu iki sayacın ne olduğunu da açıklayayım:
Target Server Memory (KB): İlgili SQL Server Instance'ınızın Data Cache için kullanabileceği azami değerdir.

Total Server Memory (KB): İlgili SQL Server Instance'ınızın an itibariyle Data Cache'te depoladığı veri miktarıdır.


Çok kısa bir sürede, 2 dakika içerisinde Total Server Memory (KB) sayacının değeri 6GB'e ulaştı! Yani SQL Server maksimum kullanabileceği RAM'i kullandı, sadece 2 dakikada. Bunun Production sunucunuzda olmasını istemezsiniz. Çünkü bu, tüm Data Cache/Buffer Pool'unuzdaki Page'lerin diske yazılıp RAM'dan çıkacağı anlamına gelir ve DBCC CHECKDB işleminden sonra uygulamanız vasıtasıyla yapılacak tüm rutin işlerin verileri diskten okuyacağı, yani çok fazla IO işlemi yapılabileceği demektir. Özellikle de ihtiyaçlarınızın küçük olmadığı, örneğin gün içinde Batch Requests/Sec sayacının 1000'den fazla bir değere sahip olduğu bir ortam düşünülürse ve sitem kaynaklarınız da uçsuz budaksız değilse bu pek de iç açıcı olmazdı.

Bu nedenle önerilere kulak vermenizi ve DBCC CHECKDB'yi, Restore testlerinizi (ki umarım yapıyorsunuzdur?) yaptığınız yerde çalıştırmanızı önemle tavsiye ederim!

Ekrem Önsoy

Hiç yorum yok: