SQL Server veri sıkıştırması salt okunur veritabanları için kategorik olarak iyi mi?


11

Okuduğum bazı SQL Server veri sıkıştırma literatüründe, yazma maliyetinin normalde gerekenin yaklaşık dört katına çıktığı belirtiliyor. Ayrıca, bunun veri sıkıştırmanın birincil dezavantajı olduğu ve salt okunur bir arşiv veritabanı için performansın (birkaç istisna hariç)% 100 doldurulmuş sayfaların veri sıkıştırması kullanılarak artırılacağını ima ettiği görülmektedir.

  1. Yukarıdaki ifadeler doğru mu?
  2. Veri sıkıştırma ile başka türlü (okuma için) arasındaki birincil "varyasyonlar" nelerdir?

    • "CPU + x%"?
    • "IO -y%"?
    • sayfa bölünmesi oluşumu?
    • tempdb kullanımı?
    • RAM kullanımı?
  3. Ya yazmak için?

Bu sorunun amacı için, bağlamı büyük (> 1 TB) bir veritabanının PAGE düzeyinde sıkıştırmasıyla sınırlandırabilirsiniz , ancak ek yorumlara her zaman açığız.


Referanslar:

SQL Server Storage Engine Blogu (DW senaryosu sıkıştırmanın çok avantajlı olduğunu gösterir)
Veri Sıkıştırma: Strateji, Kapasite Planlama ve En İyi Uygulamalar

Neyin sıkıştırılacağına karar vermek için daha ayrıntılı bir yaklaşım, her bir tablo ve dizin için iş yükü özelliklerinin analiz edilmesini içerir. Aşağıdaki iki metriğe dayanmaktadır:

U: Belirli bir tablo, dizin veya bölümdeki güncelleme işlemlerinin, o nesne üzerindeki toplam işlemlere göre yüzdesi. U değeri ne kadar düşükse (yani, tablo, dizin veya bölüm nadiren güncellenir), sayfa sıkıştırma için o kadar iyi aday olur.
S: Bir tablodaki, dizindeki veya bölümdeki tarama işlemlerinin, o nesnedeki toplam işlemlere göre yüzdesi. S değeri ne kadar yüksek olursa (tablo, dizin veya bölüm çoğunlukla taranır), sayfa sıkıştırma için o kadar iyi adaydır.

Yukarıdakilerin her ikisi de, DW tarzı veritabanları (okuma yoğun / özel, büyük veri işlemleri) için sayfa sıkıştırmayı önermeye doğru önyargılıdır.


Özellikle hangi literatür? Sıkıştır / aç sıkıştır için her zaman CPU ek yükü olacaktır, ancak okumalarda olduğu gibi daha az sayıda sayfaya da yazıyorsunuz. Aslında, okuma tarafı genellikle sıkıştırılmış sayfaların bellekte depolandığı için yazma tarafının daha fazla fayda sağlayacağını düşünürüm (bu her zaman değil, ayrılan veri boyutuna ve belleğe bağlı olarak en iyi durumdur).
Aaron Bertrand

3
İstediğiniz metriklerden herhangi birini sağlamak çok zor olacak, çünkü tamamen verilerin niteliğine ve sıkıştırma yeteneğine bağlı (ve bu satır ve sayfaya bağlı olarak farklı olacak) ). Bazı insanlar% 90'a varan sıkıştırma oranı bildirmiştir ki bu da bu kadar sıkıştırma yapmak için hem bellek kullanımı (olumlu bir şekilde) hem de CPU üzerinde bir etkisi olacaktır. Bu kağıt, CPU ek yükünü satır sıkıştırma için% 10 ve sayfa için daha yüksek bir seviyeye getirir . Gözlemlediğiniz şey oldukça farklı olabilir.
Aaron Bertrand

1
Salt okunur bir arşiv veritabanı için, sanırım soru, belleğe sığıp sığmayacağı olacaktır. Hepsi belleğe sığabiliyorsa, tampon havuzuna yüklendikten sonra sıkıştırılmasının gerçek bir yararı yoktur. Bununla birlikte, hepsi belleğe sığmazsa, sıkıştırılmadan yapılan iş olsa bile, önbelleğe daha az sayfa yerleştirip çıkarmanın bazı faydalarını görebilirsiniz.
Aaron Bertrand

Eklediğiniz bağlantıların hiçbiri bu 4x yazma cezasından bahsetmiyor gibi görünüyor. Bunu nereden aldığını hatırlıyor musun? Bağlamı görmek ister misiniz?
Aaron Bertrand

1
Peki, bu senaryo bir tür tartışmadan daha fazla veriyi belleğe sığdıramıyorsa, değil mi? :-)
Aaron Bertrand

Yanıtlar:


6

1-2 yıllık donanım üzerinde kendi deneylerimden sadece 2 sentim:

Sayfa sıkıştırılmış tablolarda (~ 80 satır / sayfa) salt okunur işlemleri (DW tarzı taramalar, sıralar vb.) ~ 3x sıkıştırma boyutu küçültme bile kırmak için buldum.

Yani tablolar yine de belleğe sığarsa, sayfa sıkıştırması yalnızca veri boyutu 3 katın üzerine küçüldüğünde performanstan yararlanır. Bellekte daha az sayfa tararsınız, ancak her sayfayı taramak daha uzun sürer.

Ben sanırım Planlarınız iç içe-döngü ve aramak-ağır olursa kilometre değişebilir. Diğerlerinin yanı sıra, bu da donanıma bağlı olacaktır (yabancı NUMA düğümü erişim cezaları, bellek hızı vb.).

Yukarıdaki, kendi donanımımda (Dell Poweredge 910 ve daha genç) kendi sorgularımı kullanarak kendi test çalıştırmalarıma dayanarak, takip ettiğim sadece basit bir kural. Müjde değil ha!

Düzenleme: Dün Thomas Kejser mükemmel SQLBits XI sunumu bir video olarak sunuldu. Bu tartışma ile oldukça ilgili olan, sayfa sıkıştırma için CPU maliyetinin 'çirkin' yüzünü gösterir - güncellemeler 4x yavaşladı, kilitler biraz daha uzun süre tutuldu.

Ancak , Thomas FusionIO depolamayı kullanıyor ve sayfa sıkıştırma için sadece 'sadece' uygun bir tablo seçti. Depolama tipik bir SAN üzerindeyse ve kullanılan veriler 3x-4x sıkıştırılmışsa, resim daha az dramatik olabilir.


1
Bu eski donanım olabilir mi? Yeni donanımda, çıplak SSD Depolama için, çekirdeklerin disklere kolayca yetişemediğini görüyorum. Noramlly faydası çok daha kolay başlayacaktı - IO'da% 50'lik bir azalma, birçok değişiklik yapmazken buna değer.
TomTom

TomTom, Storage bu rakamlar için devreye girmiyor. Karşılaştırma, bellekteki sıkıştırılmamış tablolar ile bellekteki sıkıştırılmış tablolar arasındadır.
John Alan

Bellek için yeterince iyi bir DWH görmedim. Ciddi anlamda. Diske geri döneceksin.
TomTom

1
Evet tabii ki zaman zaman diske geri döneceksiniz - diskten okuma, sayfa sıkıştırmanın neredeyse her zaman bir kenarı olduğu yerdir (verilerin yeterince sıkıştırılabilir olduğu varsayılarak!). Ancak iş yükünüz diskten bir kez yüklenir ve daha sonra günün geri kalanında bellekteki her şeyi değiştirirse - disk okumaya ne kadar ağırlık verirsiniz ve bellek içi işlemlere ne kadar ağırlık verirsiniz?
John Alan

1
Thomas Kejser tarafından SQLBits 2013'ten ilgili bir sunum slayt gösterisine yeni rastladım: slideshare.net/fusionio/…
John Alan

0

Veri Ambarı ortamımdan birkaç kelime ekleyebilirim.

30 milyon satır (18 GB) içeren bir test tablosuna sıkıştırma (benim durumumda PAGE) uygulamak, tablonun boyutunu 18GB'dan 3GB'a düşürür! (depolama verimliliği kesin) ancak yükleme süresini (yazma) 22'den 36 dakikaya çıkarın.

Bu nedenle, verileri okumak veya okumak ve belleğe yerleştirmek için iyi bir çözüm olabilir, ancak günlük veri yüklemesi için performansın düşmesine neden olabilir.

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.