Bazı İlk Uyarılar:
- Genellikle bir kötü uygulama olarak bilinir şimdiye (Günlük dosyaları olarak başka bir sorun olduğu bir üretim veritabanı veya veri dosyasını küçültmek bu soru hakkında görüşmelerin). İnsanlara, "doğru boyutlandırma" ve iyi planlama hakkında bahsettiğim blog yazılarında veritabanlarını daraltmalarını tavsiye ediyorum. Orada yalnız değilim ( Paul Randal , Brent Ozar , sadece birkaç bağlantı daha sağlamak için). Bir veri dosyasını ya da veri tabanı parça dizinlerini küçültmek, kaynaklarınız üzerinde yavaş ve zahmetlidir, sisteminizi boşaltabilir ve genellikle yapılması gereken kötü bir şeydir.
- Bu durumda, hepimiz riskin var olduğunu biliyoruz, bununla başa çıkmaya hazırız , ancak bir daha asla ihtiyacımız olmayacağını bildiğimiz çok fazla yer bıraktık . Yani bu özel davada - daralma seçeneklerimizden biri olarak çok anlamlı.
Endişeleri ve riskleri okuduysanız ve bu küçültmeyi yine de yapmanız gerekiyor, çünkü önemli miktarda yer bıraktınız , umarım bu cevabın geri kalanı size yardımcı olacaktır. Ancak riskleri göz önünde bulundurun.
Burada ele alınan iki ana yaklaşım var:
1.) Küçült Evet, gerçek küçültmeyi yapın - DBCC SHRINKFILE
yerine kullanmayı düşünün DBCC SHRINKDATABASE
, neyin küçüleceği ve nasıl kontrol edildiği konusunda daha fazla kontrol sahibi olun. Bu , kesin olarak performansın düşmesine neden olacaktır - çok fazla GÇ işlemi yapan büyük bir işlemdir. Sen olabilir , potansiyel olarak giderek küçülüyor bir hedef boyuta tekrarlanan ruh doktoru paçayı.
Bu, yukarıdaki DBCC SHRINKFILE
linkte "A.)" örneğidir. Bu örnekte bir veri dosyası 7 MB'lık hedef boyutuna küçültülmektedir. Bu biçim, kapalı kalma sürenizin izin verdiği şekilde tekrar tekrar küçültmek için iyi bir yoldur. Bunu, performansın nasıl göründüğünü ve bir artışın ne kadar düşük / yüksek olabileceğini görmek ve üretimde beklenen zamanlamayı belirlemek için geliştirme üzerine yapılan testlerde yaparım. Bu bir çevrimiçi işlemdir - sistemdeki kullanıcılarla veritabanının küçültülmesine erişerek çalıştırabilirsiniz, ancak neredeyse garanti edilen performans düşüşü olacaktır. Bu yüzden sunucuya ne yaptığınızı izleyin ve izleyin, ideal olarak bir kesinti penceresi veya daha hafif bir aktivite süresi seçin.
USE YourDatabase;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO
Her Zaman Unutmayın: - her daraltdığınızda, dizinlerinizi parçalıyorsunuz ve uzun süre boyunca topaklarda daralmaya devam ederseniz, bir dizin yeniden oluşturmalısınız. Hepsini tek bir pencerede yapamıyorsanız, şimdi her seferinde bu maliyete katlanıyorsunuz.
2.) Yeni Veritabanı - Yeni bir veritabanı oluşturabilir ve veriyi ona geçirebilirsiniz . Boş veritabanını ve tüm anahtarlarını, dizinlerini, nesnelerini, işlemlerini, işlevlerini vb. Kodlamanız ve ardından verileri ona aktarmanız gerekir. Bunun için komut dosyaları yazabilir veya Red Gate'den SQL Data Compare gibi bir araç veya benzer araçlara sahip diğer satıcıları kullanabilirsiniz. Bu senin yanında daha fazla kurulum çalışması, daha fazla geliştirme ve test etme ve ortamınıza bağlı olarak, kapalı kalma sürenizi de etkileyebilir ancak göz önünde bulundurmanız gereken bir seçenek olabilir.
Bir Veritabanını küçültmek zorunda
kaldığımda Eğer bu benim ortamım olsaydı, veri dosyasında adil / ağır miktarda beyaz bir alan bırakmayı düşünüyorum, çünkü bir disk domuzu olmayı seviyorum ve gelecekteki / beklenmedik bir büyümeye hazırlanmayı seviyorum. Bu yüzden, eğer alanın çoğunluğunu yeni silersek, geri alan vermek sorun olmazdı, ama "ama bir daha asla büyümeyecek" diyenlere asla güvenmezdim ve hala biraz boşluk bırakıyordum . Büyük ihtimalle birlikte gideceğim rota ( iç çekiş)) daha küçük kapalı kalma süresi olan pencerelerim varsa ve boş bir DB oluşturma ve buna veri aktarmanın karmaşıklığına maruz kalmak istemiyorsam, küçültme yaklaşımıdır. Ben o aşamalı bir kaç kez küçültmek olur Yani endeksleri yeniden sonra ve (giderek daha küçük dosya boyutu seçerek. Ben dev ve istenilen boyutta benim testlere dayanmaktadır gerektiğini düşündüm kaç kere dayanarak) .. Sonra' kimseye veritabanımı küçültmediğimi asla söyleme ;-)