Sql Server - Büyüyen Veritabanı Dosyaları için En İyi Uygulamalar


16

İki hafta boyunca sql server 2008 r2'deki veri toplayıcı ile dosya büyümesini izliyorum. Veritabanı sürekli 35 (MB) / Gün civarında büyüyor. DB henüz 2 GB başlangıç ​​boyutuna ulaşmadı.

DB dosyaları otomatik büyüme 5MB olarak ayarlanmıştır ve ben farklı bir yaklaşım denemek istiyorum, bu yüzden öneri ve / veya yorum arıyorum.

Her hafta Pazar gecesi saat 01: 30'da çalışan bir ayarlama görevi vardır. Görev:

  • Veritabanı Bütünlüğünü Kontrol Edin
  • Günlük Dosyasını Küçült - (Günlük modu basit olduğu için sorun yok)
  • Veritabanını Küçült
  • Dizini Yeniden Düzenle
  • Dizini Yeniden Oluştur
  • İstatistikleri Güncelle
  • Geçmişi Temizle

Haftalık ayarlama planına iki adım daha eklemek istiyorum:

  1. Kullanılan alan belirli bir eşiğe veya toplam boyuta ulaşırsa, veritabanı dosyasını 500 MB büyütün.
  2. Kullanılan alan toplam boyutun belirli bir eşiğine ulaşırsa günlük dosyasını 250 MB (küçültmeden sonra) büyütün.

Büyüme yükünü çevrimdışı saatlere yerleştirerek, ağır yükler sırasında otomatik büyüme olaylarının sayısını azaltarak performans elde etmeyi umuyorum.

Otomatik büyüyen dosyalarla ilgili iki sorum var.

  • Dosya büyüme adımları koymak için en iyi yer, mevcut adımlardan önce veya sonra olurdu?
  • Eğer ALTER DATABASE|MODIFY FILEdosyayı büyütmek için kullanırsam o zaman nasıl belirleyebilirim SpaceUsedInFile >= (TotalFileSpace-@AllowanceThreshold)?

2
DB'niz hiç büyümeyecek kadar büyük olmalıdır . Daha azı, Anında Dosya Başlatma'nın etkin olduğundan emin olun .
Remus Rusanu

3
@Remus idealken, kariyeriniz boyunca her veritabanını mükemmel bir şekilde önceden boyutlandırdığınızı mı söylüyorsunuz? Her zaman bir tahmin çalışması ve ayarlamalar yapılacaktır. Büyümenin kontrol edilmesi gerektiğine ve günde sadece 7 kez bırakılmayacağına katılıyorum.
Aaron Bertrand

3
@AaronBertrand: Basit, abartılı tavsiyeden yanayım . Zamanla daha iyi yapıştığını öğrendim. Çoğu kullanıcı 'buna bağlıdır' ve kendi başlarına siyah ve beyaz arasında gri tonları olduğunu anlayamaz ...
Remus Rusanu

3
@DanAndrews: Aşırı tahsinin 'aşağı akım' etkileri olabilir. Sadece 1
GB

2
Ben sadece şeytanın avukatını oynuyorum. Ancak, HD'ler ucuz. Yeniden yapılandırma ve performans kaybı için üretimde zaman kaybı pahalıdır.
Dan Andrews

Yanıtlar:


24

Mümkün olduğunca az otomatik büyümeyi hedeflemelisiniz. Anında dosya başlatma ile bile günde yedi kez dayanıcıdır.

Bir Shrink Veritabanı yapmayın. Hiç. Shrinkfile, belki, ama sadece olağanüstü bir olaydan sonra. Sadece tekrar büyümek için küçültmek boşuna bir egzersizdir ve aslında otomatik parçalanma olarak adlandırılmalıdır.

Kurtarma modeli basitse, yeryüzünde günlük dosyanızı 250 GB büyütmeniz gerekmez. Bir ay önce bir işleme başlamadıysanız ve hiçbir zaman taahhütte bulunma veya geri alma niyetiniz yoksa, dosyada kullanılan alan zaman içinde otomatik olarak temizlenecektir.

Benim tavsiyem şöyle olur:

Veri dosyasını sessiz bir süre boyunca birkaç aylık büyümeyi barındıracak bir boyuta manuel olarak otomatik olarak büyütün. Bu arada ne için biriktiriyorsun?

Veri dosyası için otomatik büyüme artışını nispeten küçük bir şeye ayarlayın (böylece kullanıcılar gerçekleştiğinde kesintiye uğratmayacak şekilde) ve bu olay hakkında uyarın (örneğin varsayılan izlemede veya genişletilmiş olarak) Etkinlikler). Bu, tahmin ettiğiniz yüksek noktaya vurduğunuzu söyleyebilir ve tekrar manuel olarak büyüme zamanı. Bu noktada, alanı barındırmak için farklı bir sürücüye yeni bir dosya / dosya grubu eklemek istemeniz durumunda bu kılavuzu saklamak isteyeceksiniz, çünkü sonunda mevcut sürücüyü dolduracaksınız.

Günlük dosyasını, her zamankinden iki kat daha büyük olacak şekilde otomatik olarak büyütün. Bazı şeyleri tutan anormal bir işlem olmadığı sürece otomatik olarak daha fazla büyümemelidir. Bu olayı da izlemelisiniz, böylece onlar hakkında bilgi sahibi olursunuz.


Giriş için teşekkürler ... Günlük dosyasını büyütmek ve bir süre izlemek için tavsiyelerinizi kullanacağım. Autgrow boyutunda MB için yanlış GB kullanmıştım. Kabul ediyorum ve Shrink Veritabanının amaçlananı yaptığını düşünmüyorum. Yıl sonunda DB 15GB'a ulaşır, işin oluşturulduğu sırada yedeklemeler için yerimiz tükeniyordu.

+1 için auto-fragment olarak adlandırılmalıdır :-) Bunun için bir Connect sorunu başlattınız mı? :-)
marc_s

10

Otomatik büyüme, mümkünse kaçınmaya çalışmanız gereken bir şeydir. Sorun şu ki, büyümenin ne zaman gerçekleşebileceği üzerinde hiçbir kontrole sahip değilsiniz ve sisteminiz bu sırada ciddi bir isabet alabilir.

Dosya boyutunuzu bir ay kadar mantıklı bir değere ayarlayın ve büyüme oranınızı X zaman için ne kadar alan tahmin ettiğinizi öğrenin ve boyutunuzu bu + hata marjına ayarlayın.

Dosya boyutu otomatik büyümeden önce önceden tanımlanmış bir maksimum değere ulaştığında beni uyaracak basit bir izleme işi kurdum. Bunun gibi bir şey kullanabilirsiniz:

SELECT instance_name,
       [Data File(s) Size (KB)],
       [LOG File(s) Size (KB)],
       [Log File(s) Used Size (KB)],
       [Percent Log Used]
       into ##Logsize
FROM
(
   SELECT *
   FROM sys.dm_os_performance_counters
   WHERE counter_name IN
   (
       'Data File(s) Size (KB)',
       'Log File(s) Size (KB)',
       'Log File(s) Used Size (KB)',
       'Percent Log Used'
   )
     AND instance_name = 'database your interested in' 
) AS Src
PIVOT
(
   MAX(cntr_value)
   FOR counter_name IN
   (
       [Data File(s) Size (KB)],
       [LOG File(s) Size (KB)],
       [Log File(s) Used Size (KB)],
       [Percent Log Used]
   )
) AS pvt 
go
declare @logsize int
Select @logsize = [Percent Log Used] from ##Logsize

If @logsize > the maximum percent you want the log to fill too i.e 90
    BEGIN
        --Do your thing here
    END

Drop table ##Logsize

Bu elbette bir iş olarak planlanabilir.


Tüm veritabanlarını döndürmek "ilgilendi" AND instance_name = 'veritabanı "kaldırmak. Ardından, günlük boyutunun IF deyiminde bir eşiğin üstünde olduğu bir sayı kullanın. Sayım 1'den yüksekse, limitin üzerindeki günlüklerin adlarını e-posta ile göndermek için geçici tablodan bir ad deyimi içeren bir sp_send_dbmail yaparım.
Nick Winstanley
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.