Kümelenmiş sütun deposu dizinleri ve yabancı anahtarlar


18

Ben bir veri ambarı dizinleri kullanarak performans ayarlama. SQL Server 2014 için oldukça yeniyim.Microsoft aşağıdakileri açıklar:

"Kümelenmiş sütun deposu dizinini, büyük veri ambarı olgu tablolarını saklama standardı olarak görüyoruz ve çoğu veri ambarı senaryosunda kullanılmasını bekliyoruz. Kümelenmiş sütun deposu dizini güncellenebilir olduğundan, iş yükünüz çok sayıda ekleme, güncelleme, ve silme işlemleri. " http://msdn.microsoft.com/en-us/library/gg492088.aspx

Bununla birlikte, dokümantasyonda daha fazla okursanız, sınırlamalar ve kısıtlamalar altında bulacaksınız:

"Benzersiz kısıtlamalar, birincil anahtar kısıtlamaları veya yabancı anahtar kısıtlamaları olamaz."

Bu beni çok karıştırıyor! Veri ambarında çeşitli nedenlerle yabancı anahtarların bulunması (veri bütünlüğü, anlamsal katman için görünür ilişkiler ...) iyi bir uygulamadır (zorunlu değildir).

Microsoft, veri ambarı senaryoları için kümelenmiş sütun deposu dizinlerini savunuyor; Ancak, yabancı anahtar ilişkileri idare edemez ?!

Bu konuda doğru muyum? Başka hangi yaklaşımları önerirsiniz? Geçmişte, veri ambarı senaryolarında kümelenmemiş bir sütun deposu dizini kullandım, veri yükleri için bırak ve yeniden oluştur. Ancak SQL Server 2014 daha sonra veri ambarları için gerçek bir yeni değer katmıyor ??


Özellik olgunlaştıkça, bu özelliklerin gittikçe daha fazla desteklendiğini göreceksiniz (heck, 2012'de sütun mağaza dizinleri salt okunur!). Bu arada, size bir takas teklif edilir - sınırlamalarla veya aynı eski aynı eski ile harika bir performans. Ayrıca, DW'nizdeki her tablonun kümelenmiş columntore dizinleri olması gerektiğini ve hiçbir tablonun herhangi bir kısıtlamaya sahip olması gerektiğini düşünmediklerini düşünmüyorum - muhtemelen herhangi bir DW'da büyük bir patlama sağlayacak tabloların sınırlı sayıda olması Buck.
Aaron Bertrand

3
Dikkat -Bağlantıları işleyebilir. Bir FK ilişkisine katılmak için tamamen gerekli değildir. Referans bütünlüğünü ele almak için var - ki bu güzel bir veri deposunda atlanabilir. Risk altında, evet, ama aynı zamanda bir performans kazancı ile.
TomTom

8
Ayrıca - "gerçek yeni değer yok" mu? Yazılabilir ve kümelenmiş olmak size bir şey gibi gelmiyor mu? Kullanıcıların bir veriyi beklemek yerine verileri gerçek zamanlı olarak sorgulayabilmesi ve daha güncel veriler elde etmek için yeniden oluşturması, kullanıcılarınız için iyi bir şey ve sizin için daha az bakım gibi görünmüyor mu? omuz silkme
Aaron Bertrand

Dizine alınmış bir görünüm oluşturarak (benzersiz) dizinlere sahip olabilirsiniz. Endeks bakımı için altyapı zaten var gibi görünüyor. Sadece normal indeksler henüz uygulanmamıştır.
usr

@AaronBertrand Yabancı anahtarlı bilgi tabloları içeren bir DWH senaryosunda Kümelenmiş Sütun dizini çalışmaz. Bu, Microsoft ile büyük bir tezat olarak bunu büyük olgu tablolarını depolamak için standart olarak bekliyor. Umarım yanlış olduğunu kanıtlayabilirsin ...? Çünkü SQL Server'ı seviyorum.
OverflowStack

Yanıtlar:


13

Burada bir sürü sorunuz var:

S: (Yabancı anahtarların olmaması) beni çok karıştırıyor! Fk'nin çeşitli nedenlerle (veri bütünlüğü, anlambilimsel katman için görünür ilişkiler, ....) DWK'da olması iyi bir uygulamadır (zorunlu değildir).

C: Doğru, bir veri ambarında yabancı anahtarlara sahip olmak normalde iyi bir uygulamadır. Ancak, kümelenmiş sütun deposu dizinleri henüz bunu desteklememektedir.

S: Yani MS, DWH senaryoları için Kümelenmiş Sütun deposu dizinlerini savunuyor, ancak FK ilişkilerini işleyemiyor mu ?!

Y: Microsoft size araçlar sunar. Bu araçları nasıl kullandığınız size kalmış.

En büyük zorluğunuz veri ambarınızda veri bütünlüğü eksikliği ise, istediğiniz araç yabancı anahtarlara sahip geleneksel tablolardır.

En büyük zorluğunuz sorgu performansıysa ve yükleme işleminin bir parçası olarak kendi veri bütünlüğünüzü kontrol etmek istiyorsanız, istediğiniz araç kümelenmiş sütun deposu dizinleridir.

S: Ancak SQL 2014 DWH için gerçek bir yeni değer katmıyor ??

Y: Neyse ki, kümelenmiş columntore, SQL Server 2014'teki tek yeni özellik değildi. Örneğin, yeni kardinalite tahmincisine göz atın.

S: En sevdiğim özelliğin uygulanma şekli neden bu kadar kızgın ve acıyım?

C: Beni yakaladın - bu soruyu gerçekten sormadın - ama yine de cevaplayacağım. Her şeyin tam spesifikasyonlarınıza göre üretilmediği üçüncü taraf yazılım dünyasına hoş geldiniz. Bir Microsoft ürününde görmek istediğiniz bir değişiklik konusunda tutkulu hissediyorsanız, Connect.Microsoft.com adresine bakın . Değişiklik gönderebileceğiniz geri bildirim sürecidir, diğer insanlar oy verebilir ve ürün ekibi bunu okur ve neden uygulayamayacaklarını söyler. Ara sıra. Çoğu zaman sadece "düzeltmez, makinemde çalışır" olarak işaretlerler, ama hey, bazen bazı cevaplar alırsınız.


"Doğru, normalde bir veri ambarında yabancı anahtarlara sahip olmak iyi bir uygulamadır" -> SQLCAT - Büyük Ölçekli İlişkisel Veri Ambarı Oluşturmak için En İyi 10 Uygulama ... "Her yabancı anahtar için kümelenmemiş dizinler oluşturun." -> Bağlantıda belirtilen FK ilişkisini uygulama hakkında hiçbir şey yok ve CI olmayan sütun sütun deposundan dolayı gereksiz, bu yüzden gerçek tablosunda FK'ye gerek yoktur, kabul eder misiniz? Bu konudaki düşüncelerinizle ilgileniyorum.
Adrian Torrie

1
... ve boyutlar için: "Daha hızlı veri yüklemelerine izin vermek için olgu ve boyut tabloları arasında yabancı anahtar ilişkilerini zorunlu kılmaktan kaçının. İlişkileri belgelemek için NOCHECK ile yabancı anahtar kısıtlamaları oluşturabilirsiniz; ancak bunları zorlamayın. Veri bütünlüğünü sağlayın Dönüşüm Arama olsa da, ya da veri kaynağında veri bütünlüğü kontrolleri gerçekleştirmek "
Adrian Torrie

6

Alıştığınız bazı parçaların eksik olduğunu anlayabiliyorum. Ama bu sadece eksik oldukları için.

Bununla birlikte, Yabancı Anahtarlar sadece bir kavram (o günlerde tetikleyiciler aracılığıyla uyguladığımız) olduğunda, kısıtlama gibi fiziksel bir uygulama olmadığında SQL Server başarılı bir şekilde kullanılıyordu. Bildirici Başvuru Bütünlüğü, en azından SQL Server 7.0 tarafından vardı, ancak geçerli uygulamadan çok daha zayıftı.

Kümelenmiş ColumnStore Dizin değeri ile ilgili olarak bir dizin sağlar ve satırlar güncelleştirilebilir. Bu tartışmayı değerli bulabilirsiniz: http://sqlwithmanoj.com/2014/07/24/maintaining-uniqueness-with-clustered-columnstore-index-sql-server-2014/

Manoj, bu tablonun üstünde Dizine Alınmış / Materyalize Görünüm oluşturmanın bir yolu olduğunu ve Küme Anahtarının PK (tablonun / görünümün 1. sütunu) olduğunu belirtir. Bunun size uygun olup olmadığı elbette vermeniz gereken bir karardır.

Ancak, Aaron Bertrand ve TomTom'un yorumladığı gibi, hepsi daha iyi performansla ilgilidir. Eğer (ve onlar inanıyorum endişe diğer sorunları yönetebilir ise şunlardır yönetilebilir) o zaman epeyce avantajlar elde edeceksiniz. Bu nedenle, ColumnStore'u yapabilecekler için kullanın ve eksik özellikleri kendiniz yönetin.


2

Bu soru SQL 2014 ile ilgilidir, ancak farklı sürümlerdeki sınırlamaları sıralamak zor olabileceğinden ve bu soru Google'da oldukça yüksek olduğu için SQL 2016'da sütun mağaza dizinlerinde yapılan değişiklikler ışığında ek bilgi sağlamak istiyorum:

SQL 2016 için Microsoft, sınırlama sütun mağaza dizininden önce eklenmesi koşuluyla, yabancı anahtar kısıtlamalarını zorunlu kılmak için kümelenmemiş btree dizinlerini (artık kümelenmiş bir sütun deposu tablosuna ikincil dizinler olarak eklenebilecek) kullanma yöntemini açıklar: https: // docs .microsoft.com / tr-tr / sql / ilişkisel-veritabanları / endeksler / columnstore-indeksleri-tasarım-rehberlik

Niko Neugebauer'in de bu konuda bir blog yazısı var; aslında doğrudan köşe mağaza tablolarında benzersiz / yabancı kısıtlamalar oluşturmak mümkündür (işimde bu yaklaşımı uyguluyorum): http://www.nikoport.com/2015/09/15/columnstore-indexes-part-66- daha-kümelenmiş-columnstore-iyileştirmeler-in-sql sunucu-2016 /

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.