SQL Server temel test için adımların kesin listesi?


10

SQL Server kullanan bir uygulama için bir performans testi / taban çizgisi çalıştırmadan önce, örneği yeniden başlatmadan örneği "temiz" duruma ayarlamak istiyorum. Takip etmeye çalıştığım adımlar var, ancak doğru sırada olan ve gereksiz adımlar olmayan kesin bir liste oluşturmak istiyorum.

Bu adımların listesi SQL Server'ı "temiz" duruma ayarlamayı başarıyor mu?

Dizi mantıklı / doğru mu?

Gereksiz adımlar var mı?

CHECKPOINT              -- Write all dirty pages

DBCC DROPCLEANBUFFERS   -- All should be clean after checkpoint?

DBCC FREEPROCCACHE      -- Clear the plan cache

DBCC FREESYSTEMCACHE    -- Is this necessary after FREEPROCCACHE?

DBCC FREESESSIONCACHE   -- May not be necessary if distributed queries aren't used, but want to catch all scenarios

EXEC SP_UPDATESTATS     -- Refresh stats

'BEGIN TESTING!'

5
FYI, DROPCLEANBUFFERStest için güzel ama her zaman doğru değil. Yüksek hacimli bir tabloya başvuruyorsanız, neredeyse her zaman bellekte sayfalarınız olacaktır ve ES zamanı bu sorguda büyük bir faktör olmayacaktır. Bu durumda gerçekçi olmayandan daha fazla kilo almış olabilirsiniz.
JNK

Bir üretim ortamında veya izole bir test ortamında test yapmaktan mı bahsediyorsunuz?
bopapa_1979

Prod ortamında test yapan herkes işten çıkarılmalıdır. :) Evet, test ortamları.
Eric Higgins

Yanıtlar:


5

İlk olarak, geri adım atarım ve test sırasında hangi ölçümleri toplamayı planladığınızı sorarım. Örneğin, sorgu yoluyla mantıksal okumaları sayıyorsanız, önbelleği boşaltmanız gerekmez. Mantıksal okumaları kullanmanın büyük bir hayranıyım çünkü verilerin önbelleğe alınmış veya diskte olup olmadığından bağımsızdır - ve üretimde, bir sorgunun verilerinin önbelleğe alınıp alınmayacağını tahmin etmek zordur (tüm veritabanını bellekte önbelleğe almadıkça) . Mantıksal okumaları en aza indirgemek için ayar yaparsanız, veriler önbellekte olsun veya olmasın uygulama daha hızlı gidecektir.

Sonra, koşular arasında neyin değiştiğini sorgularım. Örneğin, önerdiğiniz gibi her veritabanında EXEC SP_UPDATESTATS çalıştırarak, güncelleştirilmiş tablolar için istatistikleri yeniden örnekleyeceksiniz. Ancak, istatistikleri fullscan ile güncellemezseniz, tablodan rastgele satırlar alırsınız - bu çok tekrarlanabilir değil ve bunu gerçekten yapmak istediğinizi sanmıyorum. Bunun yerine, her seferinde aynı verileri test etmek için her çalışma arasındaki veritabanlarını geri yüklemek isteyebilirsiniz. Testleriniz ekleme / güncelleme / silme işlemi yapıyorsa, veritabanını geri yüklemiyorsanız (veri ekledikleri / değiştirdikleri, ayrıca verilerdeki istatistikleri değiştirdikleri için) her çalıştırmada farklı performans profilleri olabilir ve daha da kötüsü,


Çok iyi noktalar, amaç koşular arasında her şeyin aynı olması. Bu durumda @ elde ettiğim ölçümler, bir uygulamadaki belirli işlevler için çalışma süreleridir (listeyi uygulamaya döndürmek için x saniye, kuyruk öğesi eklemek için y saniye, vb.). Testler arasında değişen, uygulama kodu parçaları olabilir; SQL nesneleri değil, SQL nesneleri ve uygulama kodu değil veya uygulama kodunda değişiklik yapılmadan eşzamanlılık gibi örnek / DB düzeyi ayarları olabilir. Her testten önce kapıdan bir geri yükleme ekleyecek olsaydım, yukarıdaki listemde o nokta hakkında ne hissediyorsunuz? Hiçbir şey kaçırıyor muyum yoksa dizinin biraz çalışması mı gerekiyor?
Eric Higgins

Brent, testinizde CPU'yu mu dikkate alıyorsunuz?
AK

@EricHiggins Birden fazla şeyi aynı anda test etmek yerine parçaları ayrı ayrı test ederim. Sorguları doğrudan test etmeyi ve orada hangi değişikliklerin performansı etkilediğini görmeyi tercih ederim. Örneğin, uygulamada belirli işlevleri gerçekleştirirken bir SQL izlemesi çalıştırın ve ardından performansı artırmak için dizin / yapılandırma değişiklikleri yaparken bu izlemeyi tekrar oynatmaya devam edin ve izlerde mantıksal okumalar ve CPU metrikleri gibi şeyleri izleyin.
Brent Ozar

@AlexKuznetsov Aslında testi yapan ben değilim - Eric soruyu soran kişi. Bu tür bir iş yaptığımda, genel olarak sunucunun yanı sıra sorgu düzeyinde CPU metriklerine de bakıyorum.
Brent Ozar

Üçüncü taraf bir yük jeneratörü kullanıyoruz (ve tam zamanlı bir kişinin yük testlerinin geliştirilmesine adanmış olması). Bu yüzden testlerim işlem, sıra, kullanıcı sayısı, uygulamada gerçekleştirilen tam adımlar ... her şey için hassastır. Bu yüzden mutlaka SQL gösterge tablosu türü metriklerine bakmam gerekmiyor. Yükleme testi yazılımı, uygulama modüllerinin milisaniyeye kadar olan yanıt sürelerini izler. Bu yüzden bir DB geri yükleme yapmak iyi bir fikirdir. Her test turundan önce aradığım "Temiz kayrak" durumunu gerçekleştirdiğimden emin olmak için yaptığım diğer adımları akılcı olarak kontrol etmeliyim.
Eric Higgins
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.