SQL Server: sadece sistem tabloları için dosya grubu?


11

Kurumsal standartlarımızdan biri, kullanıcı tabloları / dizinleri için ayrı bir dosya grubuna / dosyasına sahip olmaktır. Bu varsayılan olarak ayarlanmıştır, bu nedenle CREATE TABLE ifadelerini nitelemeye gerek yoktur.

Yani şuna benziyor

  • fileid 1 = sistem tabloları, MDF
  • dosya kimliği 2 = t-log = LDF
  • fileid 3 = kullanıcı bilgileri = NDF

Buradaki herhangi biri bunun neden zorunlu kılındığına dair asıl gerekçeyi anlamama yardımcı olabilir mi?


Temiz olacağım ve sanırım bu vudu. Am I yanlış ...?

Düzenleme: Ben dizinleri / bölümleri / arşivleri ayırmak için dosya gruplarını nasıl kullanılacağını ve parça parça geri yükleme nasıl biliyorum. Bu soru, yalnızca sistem tabloları için aynı birimde ayrı bir dosya grubunun kullanılmasıyla ilgilidir.

Yanıtlar:


9

Microsoft'un 70-432 eğitim kitabı "Nesnelerinizi birincil dosya grubuna yerleştirmemenin temel nedeni, G / Ç'de olabildiğince fazla yalıtım sağlamaktır. Sistem nesnelerindeki veriler, veriler kadar sık ​​değişmez Birincil veri dosyasına yazma etkinliğini en aza indirerek, donanım arızaları nedeniyle bozulma olasılığını azaltırsınız.Ayrıca, birincil dosya grubunun durumu veritabanının durumunu da belirlediğinden, kullanılabilirliği artırabilirsiniz veritabanının birincil dosya grubunda yapılan değişiklikleri en aza indiriyorum. "

Yani, bunu istediğin gibi al. Diğerleri bunun belirli durumlarda gerekli olmadığını ve elbette sürdürülmesi daha fazla olduğunu söylüyor. Microsoft'un akıl yürütmesini sağlayacağımı düşündüm.


Makul, bunun için bazı yazılı gerekçe. Bunu kabul edeceğim
gbn

1
Bir başka neden, bir PARTIAL veritabanı geri yüklemesinin, PRIMARY dosya grubunun ve seçilen diğer dosya gruplarının geri yüklenmesine izin vermesinin doğru tasarlanmış bir VLDB'nin daha hızlı kurtarılmasına izin vermesidir. Arşivlenen / ikincil dosya gruplarının daha sonra geri yüklenmesine izin verme.
MartinC

@MartinC: Kısmi geri yüklemeleri vb. Biliyorum, ama sistem tablolarını açıkça ayırmanın mantığını hiç anlamadım. Performans, arşivleme, bakım, bölümleme vb. İçin dosya grupları. Jared şimdiye kadarki en iyi açıklamayı sundu ..
gbn

Veritabanı bir bütün olarak çok büyükse, birincil dosya grubu ana verilerden daha düzenli bir yedeklemeye sahip olabilir. Geri yükleme yalnızca kuyruk günlüğü yedeklemesi ve dosya grubu yedeklemesi artı kuyruğu nedeniyle birincil dosya grubu ve işlem günlüklerinin geri yüklenmesini gerektirir. Sistem tabloları küçük olduğundan, bu, tüm veritabanı için bunu yapmak vs daha hızlı bir kurtarma işlemi olacaktır, böylece bir sorun durumunda kesinti süresini azaltabilir.
MartinC

12

Bu bir performans kazancı değil, geri kazanılabilir bir kazanım var. Sistem tablolarında dosya bozulması olursa veritabanı kaybolur. Kullanıcı verilerini ayrı bir dosya grubunda (veya gruplarda) tutarsanız, geri yükleme sırasında veritabanının geri kalanını çevrimiçi tutan bu dosyaları geri yükleyebilirsiniz (Enterprise Edition'ı burada varsayarsak).

Eğer bu yüzden bu nedenle, söyleyemem, ama bu sadece birincil dosya grubunda sistem nesneleri ile birden fazla dosya grubu sahip olmanın bir yararı olacaktır.

Bununla birlikte, AutoShrink'in etkinleştirilmesi gerektiğini söylemek için hurdaya atmalısınız.


Bununla ilgili daha fazla bilgi edinmek için Çevrimiçi Kitaplar'da Çevrimiçi Parça Parçasını Geri Yükleme'yi arayabilirsiniz.
Brent Ozar

1
Ben her zaman 2 dosya grupları aynı birimde (SAN üzerinde) verilen bu voodoo olduğunu düşündüm. Yolsuzluk riski çok mu yüksek? (Gerçek operasyonel DBA'lar AutoShrink false değerini ayarladı)
gbn

Oranlar bozuksa, depolama alanı sayfayı diske yazarken hickup olacağı için tek bir dosyada tek bir sayfa olacaktır. Veritabanı bozulmasının% 99,9999'u gibi bir şey bir depolama sorunudur. Geri kalan sorunların 1 / 2'si kötü bellek, geri kalanı SQL hatalarıdır. Veritabanları büyüdükçe (çoklu TB) bu daha önemli hale gelir, çünkü çoklu TB veritabanını geri yüklemek birkaç gün sürer.
mrdenny

Gelecekte yapmanız gereken sistem nesneleri yalnızca birincil dosya grubundaysa, aşağıdakileri yapabileceğinizi düşünmek doğru olmaz mıydı? Başka bir dosya grubunda x ek dosya oluşturun. Mevcut veri dosyanızdaki verilerinizi taşıyarak bu dosyaları orantılı olarak doldurur musunuz?
Ally Reilly

4

Anladığımdan emin değilim, birisinden kurumsal standardınızı haklı çıkarmasını mı istiyorsunuz? Şirketiniz için bu standartlar belgesini yazan kişi, bunun neden yapılabileceğine ışık tutabileceğini düşünürdüm.

Bununla birlikte, bazı mağazaların sistem verilerini kullanıcı verilerinden çıkarmak istemesi olağandışı değildir. Ayrılmış disk kümeleriyle birlikte kullanılırsa, bazı performans kazançları elde edebilirsiniz.


Teşekkürler. Gerekçelendirmeyin, açıklayın. Bu aynı AutoShrink yazan DB Mühendislik ekibi. Verilen sistem tabloları birkaç MB yer kaplıyor ve yine de bellekte olacak, herhangi bir performans kazancı olduğuna inanıyor musunuz?
gbn
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.