Aracılığıyla paylaş


Veri sıkıştırma

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen Örneği

SQL Server, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği, satır deposu tablosu ve dizinleri için satır ve sayfa sıkıştırmayı destekler ve sütun deposu tabloları ve dizinleri için sütun deposu ve sütun deposu arşiv sıkıştırmasını destekler.

Satır deposu tabloları ve dizinleri için, veritabanının boyutunu küçültmeye yardımcı olmak için veri sıkıştırma özelliğini kullanın. Veriler daha az sayfada depolandığından ve sorguların diskten daha az sayfa okuması gerektiğinden, veri sıkıştırma, alan tasarrufuna ek olarak G/Ç yoğunluklu iş yüklerinin performansını artırmaya yardımcı olabilir. Öte yandan, uygulamayla veri alışverişinde bulunulurken verileri sıkıştırmak ve açmak için veritabanı sunucusunda fazladan CPU kaynakları gerekir. Satır ve sayfa sıkıştırmayı aşağıdaki veritabanı nesnelerinde yapılandırabilirsiniz:

  • Bir tablo tamamıyla yığın olarak depolanır.
  • Kümelenmiş dizin olarak depolanan tablonun tamamı.
  • Tam bir kümelenmemiş dizin.
  • Dizinlenmiş görünümün tamamı.
  • Bölümlenmiş tablolar ve dizinler için, her bölüm için sıkıştırma seçeneğini yapılandırabilirsiniz ve bir nesnenin çeşitli bölümlerinin aynı sıkıştırma ayarına sahip olması gerekmez.

Columnstore tabloları ve dizinleri için tüm columnstore tabloları ve dizinleri her zaman columnstore sıkıştırmasını kullanır ve bu kullanıcı tarafından yapılandırılamaz. Verileri depolamak ve almak için ek süre ve CPU kaynaklarını karşılayabildiğiniz durumlarda veri boyutunu daha da azaltmak için columnstore arşiv sıkıştırmasını kullanın. Sütun deposu arşiv sıkıştırmasını aşağıdaki veritabanı nesnelerinde yapılandırabilirsiniz:

  • Bir sütun deposu tablosunun tamamı veya kümelenmiş sütun deposu dizininin tamamı. Columnstore tablosu kümelenmiş columnstore dizini olarak depolandığından her iki yaklaşım da aynı sonuçlara sahiptir.
  • Bir bütün kümelenmemiş sütun deposu dizini.
  • Bölümlenmiş columnstore tabloları ve columnstore dizinleri için her bölüm için arşiv sıkıştırma seçeneğini yapılandırabilirsiniz ve çeşitli bölümlerin aynı arşiv sıkıştırma ayarına sahip olması gerekmez.

Uyarı

Veriler GZIP algoritma biçimi kullanılarak da sıkıştırılabilir. Bu ek bir adımdır ve eski verileri uzun süreli depolama için arşivlerken verilerin bölümlerini sıkıştırmak için en uygundur. İşlev kullanılarak COMPRESS sıkıştırılmış veriler dizine alınamaz. Daha fazla bilgi için bkz . COMPRESS (Transact-SQL).

Satır ve sayfa sıkıştırma konusunda dikkat edilmesi gerekenler

Satır ve sayfa sıkıştırma kullanırken aşağıdaki noktaları unutmayın:

  • Veri sıkıştırma ayrıntıları hizmet paketlerinde veya sonraki sürümlerde bildirimde bulunmadan değiştirilebilir.

  • Sıkıştırma, Azure SQL Veritabanı'nda kullanılabilir

  • Sıkıştırma, SQL Server'ın her sürümünde kullanılamaz. Daha fazla bilgi için bu bölümün sonundaki sürümlerin ve desteklenen özelliklerin listesine bakın.

  • Sıkıştırma, sistem tablolarında kullanılamaz.

  • Sıkıştırma, sayfada daha fazla satırın depolanmasına izin verebilir, ancak bir tablonun veya dizinin en büyük satır boyutunu değiştirmez.

  • En büyük satır boyutu artı sıkıştırma ek yükü en fazla 8.060 bayt satır boyutunu aştığında, tablo sıkıştırma için etkinleştirilemiyor. Örneğin, c1 CHAR(8000) ve c2 CHAR(53) sütunlarına sahip bir tablo, ek sıkıştırma yükü nedeniyle sıkıştırılamaz. vardecimal depolama formatı kullanıldığında, bu format etkinleştirildiğinde satır boyutu kontrolü gerçekleştirilir. Satır ve sayfa sıkıştırma için, nesne başlangıçta sıkıştırıldığında satır boyutu denetimi gerçekleştirilir ve her satır eklendiğinde veya değiştirildiğinde denetlenir. Sıkıştırma aşağıdaki iki kuralı zorunlu kılar:

    • Sabit uzunlukta bir türe yapılan güncelleştirme her zaman başarılı olmalıdır.
    • Veri sıkıştırmayı devre dışı bırakma işlemi her zaman başarılı olmalıdır. Sıkıştırılmış satır sayfaya sığsa bile, bu da 8.060 bayttan az olduğu anlamına gelir; SQL Server, sıkıştırılmadığında satıra sığmayan güncelleştirmeleri engeller.
  • Veri sıkıştırma etkinleştirilirken satır dışı veriler sıkıştırılamaz. Örneğin, 8.060 bayttan büyük bir XML kaydı, sıkıştırılmış olmayan satır dışı sayfalar kullanır.

  • Çeşitli veri türleri veri sıkıştırmadan etkilenmez. Daha fazla ayrıntı için bkz. Satır sıkıştırması depolamayı nasıl etkiler.

  • Bölümlerin listesi belirtildiğinde, sıkıştırma türü ROW, PAGE veya NONE olarak tek tek bölümlere ayarlanabilir. Bölüm listesi belirtilmezse, tüm bölümler deyiminde belirtilen veri sıkıştırma özelliğiyle ayarlanır. Tablo veya dizin oluşturulduğunda, aksi belirtilmedikçe veri sıkıştırma NONE olarak ayarlanır. Bir tablo değiştirildiğinde, aksi belirtilmedikçe mevcut sıkıştırma korunur.

  • Bölümlerin listesini veya aralık dışında olan bir bölümü belirtirseniz bir hata oluşturulur.

  • Kümelenmemiş dizinler tablonun sıkıştırma özelliğini devralmıyor. Dizinleri sıkıştırmak için dizinlerin sıkıştırma özelliğini açıkça ayarlamanız gerekir. Dizin oluşturulduğunda dizinler için sıkıştırma ayarı varsayılan olarak NONE olarak ayarlanır.

  • Kümelenmiş dizin bir yığında oluşturulduğunda, kümelenmiş dizin, alternatif bir sıkıştırma durumu belirtilmediği sürece yığının sıkıştırma durumunu devralır.

  • Bir yığın sayfa düzeyinde sıkıştırma için yapılandırıldığında sayfalar yalnızca aşağıdaki yollarla sayfa düzeyinde sıkıştırma alır:

    • Toplu iyileştirmeler etkinleştirildiğinde veriler toplu olarak içeri aktarılır.
    • Veriler INSERT INTO ... WITH (TABLOCK) söz dizimi kullanılarak eklenir ve tabloda kümelenmemiş bir dizin bulunmamaktadır.
    • Tablo, ALTER TABLE ... REBUILD deyimi, PAGE sıkıştırma seçeneğiyle yürütülerek yeniden oluşturulur.
  • DML işlemleri kapsamında bir yığında ayrılan yeni sayfalar, yığın yeniden oluşturulana kadar PAGE sıkıştırması kullanmaz. Sıkıştırmayı kaldırıp yeniden ekleyerek veya kümelenmiş dizin oluşturup kaldırarak yığını yeniden oluşturun.

  • Bir yığının sıkıştırma ayarının değiştirilmesi, yığındaki yeni satır konumlarına yönelik işaretçilere sahip olmaları için tablodaki tüm kümelenmemiş dizinlerin yeniden oluşturulmasını gerektirir.

  • Çevrimiçi veya çevrimdışı olarak ROW veya PAGE sıkıştırmayı etkinleştirebilir veya devre dışı bırakabilirsiniz. Bir yığında sıkıştırmayı etkinleştirmek, çevrimiçi bir işlem için tek iş parçacıklı bir işlemdir.

  • Satır veya sayfa sıkıştırmayı etkinleştirmeye veya devre dışı bırakmaya yönelik disk alanı gereksinimleri, dizin oluşturma veya yeniden derleme ile aynıdır. Bölümlenmiş veriler için, tek seferde bir bölüm için sıkıştırmayı etkinleştirerek veya devre dışı bırakarak gerekli alanı azaltabilirsiniz.

  • Bölümlenmiş bir tablodaki bölümlerin sıkıştırma durumunu belirlemek için katalog görünümünün data_compression sütununu sys.partitions sorgular.

  • Dizinleri sıkıştırdığınızda yaprak düzeyi sayfalar hem satır hem de sayfa sıkıştırma ile sıkıştırılabilir. Yaprak düzeyi olmayan sayfalar sayfa sıkıştırması almaz.

  • Boyutları nedeniyle, büyük değerli veri türleri bazen özel amaçlı sayfalardaki normal satır verilerinden ayrı olarak depolanır. Ayrı olarak depolanan veriler için veri sıkıştırma kullanılamaz.

  • SQL Server 2005'te (9.x) vardecimal depolama biçimini uygulayan tablolar, yükseltildiğinde bu ayarı korur. Vardecimal depolama biçimine sahip bir tabloya satır sıkıştırması uygulayabilirsiniz. Ancak satır sıkıştırma , vardecimal depolama biçiminin üst kümesi olduğundan, vardecimal depolama biçimini korumak için bir neden yoktur. Vardecimal depolama biçimini satır sıkıştırmasıyla birleştirdiğinizde ondalık değerler ek sıkıştırma elde edilemez. Vardecimal depolama biçimine sahip bir tabloya sayfa sıkıştırma uygulayabilirsiniz; ancak, vardecimal depolama biçimi sütunları büyük olasılıkla ek sıkıştırma elde etmemektedir.

    Uyarı

    SQL Server'ın desteklenen tüm sürümleri vardecimal depolama biçimini destekler; ancak veri sıkıştırma aynı hedeflere ulaştığı için vardecimal depolama biçimi kullanım dışıdır. Bu özellik, SQL Server'ın gelecek bir sürümünde kaldırılacaktır. Bu özelliği yeni geliştirme çalışmalarında kullanmaktan kaçının ve şu anda bu özelliği kullanan uygulamaları değiştirmeyi planlayın.

Windows'da SQL Server sürümleri tarafından desteklenen özelliklerin listesi için bkz:

Columnstore ve columnstore arşiv sıkıştırması

Columnstore tabloları ve dizinleri her zaman columnstore sıkıştırması kullanılarak saklanır. Arşiv sıkıştırma adı verilen ek bir sıkıştırma yapılandırarak columnstore verilerinin boyutunu daha da küçültebilirsiniz. Arşiv sıkıştırma gerçekleştirmek için SQL Server, veriler üzerinde Microsoft XPRESS sıkıştırma algoritmasını çalıştırır. Aşağıdaki veri sıkıştırma türlerini kullanarak arşiv sıkıştırması ekleyin veya kaldırın:

  • Arşiv sıkıştırma ile columnstore verilerini sıkıştırmak için veri sıkıştırmayı kullanın COLUMNSTORE_ARCHIVE .
  • Arşiv sıkıştırmasını açmak için veri sıkıştırmayı kullanın COLUMNSTORE . Sonuçta elde edilen veriler columnstore sıkıştırmasıyla sıkıştırılmaya devam eder.

Arşiv sıkıştırması eklemek için ALTER TABLE (Transact-SQL) veya ALTER INDEX (Transact-SQL) komutlarını REBUILD seçeneğiyle ve DATA COMPRESSION = COLUMNSTORE_ARCHIVE kullanın.

Örneğin:

ALTER TABLE ColumnstoreTable1
REBUILD PARTITION = 1 WITH (
    DATA_COMPRESSION = COLUMNSTORE_ARCHIVE
);

ALTER TABLE ColumnstoreTable1
REBUILD PARTITION = ALL WITH (
    DATA_COMPRESSION = COLUMNSTORE_ARCHIVE
);

ALTER TABLE ColumnstoreTable1
REBUILD PARTITION = ALL WITH (
    DATA_COMPRESSION = COLUMNSTORE_ARCHIVE ON PARTITIONS (2, 4)
);

Arşiv sıkıştırmasını kaldırmak ve verileri columnstore sıkıştırmasına geri yüklemek için ve seçenekleriyle REBUILD veya DATA COMPRESSION = COLUMNSTORE kullanın.

Örneğin:

ALTER TABLE ColumnstoreTable1
REBUILD PARTITION = 1 WITH (
     DATA_COMPRESSION = COLUMNSTORE
);

ALTER TABLE ColumnstoreTable1
REBUILD PARTITION = ALL WITH (
    DATA_COMPRESSION = COLUMNSTORE
);

ALTER TABLE ColumnstoreTable1
REBUILD PARTITION = ALL WITH (
    DATA_COMPRESSION = COLUMNSTORE ON PARTITIONS (2, 4)
);

Bu sonraki örnek, veri sıkıştırma ayarını bazı parçalar üzerinde columnstore, diğer parçalar üzerinde ise archival columnstore olarak ayarlar.

ALTER TABLE ColumnstoreTable1
REBUILD PARTITION = ALL WITH (
    DATA_COMPRESSION = COLUMNSTORE
        ON PARTITIONS (4, 5),
    DATA COMPRESSION = COLUMNSTORE_ARCHIVE
        ON PARTITIONS (1, 2, 3)
);

Gösteri

Arşiv sıkıştırması ile columnstore dizinlerini sıkıştırdığınızda bu, dizinin arşiv sıkıştırması olmayan columnstore dizinlerinden daha yavaş performans göstermesine neden olur. Arşiv sıkıştırmayı yalnızca verileri sıkıştırmak ve almak için fazladan zaman ve CPU kaynakları kullanmaya gücü yettiğinde kullanın.

Arşiv sıkıştırmanın avantajı, sık erişilmeyen veriler için yararlı olan azaltılmış depolama alanıdır. Örneğin, her bir veri ayı için bir bölümünüz varsa ve etkinliğinizin çoğu en son aylara aitse, depolama gereksinimlerini azaltmak için eski ayları arşivleyebilirsiniz.

Meta veriler

Aşağıdaki sistem görünümleri, kümelenmiş dizinler için veri sıkıştırma hakkında bilgi içerir:

sp_estimate_data_compression_savings (Transact-SQL) yordamı columnstore dizinlerine de uygulanabilir.

Bölümlenmiş tablolar ve dizinler üzerindeki etki

Bölümlenmiş tablolar ve dizinlerle veri sıkıştırmayı kullandığınızda, aşağıdaki noktalara dikkat edin:

  • Bölümler deyimi kullanılarak bölündüğünde ALTER PARTITION , her iki bölüm de özgün bölümün veri sıkıştırma özniteliğini devralır.

  • İki bölüm birleştirildiğinde, sonuçta elde edilen bölüm hedef bölümün veri sıkıştırma özniteliğini devralır.

  • Bölüm değiştirmek için, bölümün veri sıkıştırma özelliği tablonun sıkıştırma özelliğiyle eşleşmelidir.

  • Bölümlenmiş bir tablonun veya dizinin sıkıştırmasını değiştirmek için kullanabileceğiniz iki söz dizimi varyasyonu vardır:

    • Aşağıdaki söz dizimi yalnızca başvuruda bulunan bölümü yeniden oluşturur:

      ALTER TABLE <table_name>
      REBUILD PARTITION = 1 WITH (
          DATA_COMPRESSION = <option>
      );
      
    • Aşağıdaki söz dizimi, başvurulmayacak bölümler için mevcut sıkıştırma ayarını kullanarak tablonun tamamını yeniden oluşturur:

      ALTER TABLE <table_name>
      REBUILD PARTITION = ALL WITH (
          DATA_COMPRESSION = PAGE ON PARTITIONS(<range>),
          ...
      );
      

    Bölümlenmiş dizinler ALTER INDEX kullanarak aynı ilkeyi takip eder.

  • Kümelenmiş dizin bırakıldığında, bölümleme düzeni değiştirilmediği sürece ilgili yığın bölümleri veri sıkıştırma ayarlarını korur. Bölümleme düzeni değiştirilirse, tüm bölümler sıkıştırılmamış duruma yeniden oluşturulur. Kümelenmiş dizini bırakmak ve bölümleme düzenini değiştirmek için aşağıdaki adımlar gerekir:

    1. Kümelenmiş dizini bırakın.
    2. Sıkıştırma seçeneğini belirten seçeneği kullanarak ALTER TABLE ... REBUILD tabloyu değiştirin.

    Kümelenmiş dizinlerin OFFLINE yalnızca üst düzeyleri kaldırıldığından kümelenmiş dizini bırakmak hızlı bir işlemdir. Kümelenmiş dizin bırakıldığında ONLINE, SQL Server'ın 1. adım için bir kez ve 2. adım için bir kez olmak üzere yığını iki kez yeniden oluşturması gerekir.

Sıkıştırma çoğaltmayı nasıl etkiler?

Çoğaltma ile veri sıkıştırmayı kullanırken aşağıdaki noktalara dikkat edin:

  • Anlık Görüntü Aracısı ilk şema betiğini oluşturduğunda, yeni şema hem tablo hem de dizinleri için aynı sıkıştırma ayarlarını kullanır. Yalnızca tabloda sıkıştırma etkinleştirilemez, dizinde ise etkinleştirilmeyebilir.

  • İşlemsel çoğaltma için makale şeması seçeneği, betik yazılması gereken bağımlı nesne ve özellikleri belirler. Daha fazla bilgi için bkz. sp_addarticle.

    Dağıtım Aracısı betikler uyguladığında alt düzey Aboneleri denetlemez. Sıkıştırma replikasyonu seçildiğinde, alt düzey Abonelerde tablo oluşturma işlemi başarısız olur. Karışık topoloji için sıkıştırmanın çoğaltılmasını etkinleştirmeyin.

  • Birleştirme çoğaltması için yayın uyumluluk düzeyi şema seçeneklerini aşar ve betiklenen şema nesnelerini belirler.

    Karma topoloji için, yeni sıkıştırma seçeneklerini desteklemek gerekli değilse yayın uyumluluk düzeyi alt düzey Abone sürümüne ayarlanmalıdır. Gerekirse, oluşturulduktan sonra abone cihazında tabloları sıkıştırın.

Aşağıdaki tabloda, çoğaltma sırasında sıkıştırmayı denetleen çoğaltma ayarları gösterilmektedir.

Kullanıcı amacı Tablo veya dizin için bölüm düzenini kopyalama Sıkıştırma ayarlarını kopyala Betik oluşturma davranışı
Abonedeki bölümde bölümleme düzenini kopyalamak ve sıkıştırmayı etkinleştirmek. Doğru Doğru Hem bölüm şemasını hem de sıkıştırma ayarlarını yazar.
Bölüm düzenini çoğaltmak ancak abonedeki verileri sıkıştırmamak için. Doğru Yanlış Bölüm şemasını betikleyerek kaydeder, ancak bölüm için sıkıştırma ayarlarını kaydetmez.
Bölüm düzenini çoğaltmamak ve abonedeki verileri sıkıştırmamak. Yanlış Yanlış Bölümleme veya sıkıştırma ayarlarını betiklemez.
Tüm bölümler Publisher'da sıkıştırılmışsa, ancak bölüm düzeni çoğaltılmıyorsa, tabloyu Abonede sıkıştırın. Yanlış Doğru Tüm bölümlerin sıkıştırma için etkinleştirilip etkinleştirilmediğini denetler.

Betikler, tablo düzeyinde sıkıştırmayı devre dışı bırakır.

Diğer SQL Server bileşenleri üzerindeki etkisi

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen Örneği

Sıkıştırma Veritabanı Altyapısı'nda gerçekleşir ve veriler SQL Server'ın diğer bileşenlerinin çoğuna sıkıştırılmamış durumda sunulur. Bu, sıkıştırmanın diğer bileşenler üzerindeki etkilerini aşağıdaki faktörlerle sınırlar:

  • Toplu ithalat ve ihracat işlemleri
    • Veriler, yerel biçimde bile dışarı aktarıldığında, veriler sıkıştırılmamış satır biçiminde çıkar. Bu, dışarı aktarılan veri dosyasının boyutunun kaynak verilerden önemli ölçüde büyük olmasını sağlayabilir.
    • Veriler içeri aktarıldığında, hedef tablo sıkıştırma için etkinleştirildiyse, Veritabanı Altyapısı verileri sıkıştırılmış satır biçimine dönüştürür. Bu, verilerin sıkıştırılmamış bir tabloya içeri aktarıldığı durumla karşılaştırıldığında daha fazla CPU kullanımına neden olabilir.
    • Veriler sayfa sıkıştırmalı bir yığına toplu olarak aktarıldığında, toplu içeri aktarma işlemi veriler eklendiğinde sayfa sıkıştırma ile verileri sıkıştırmaya çalışır.
  • Sıkıştırma yedeklemeyi ve geri yüklemeyi etkilemez.
  • Sıkıştırma, log aktarımını etkilemez.
  • Veri sıkıştırma seyrek sütunlarla uyumsuz. Bu nedenle seyrek sütun içeren tablolar sıkıştırılamaz veya sıkıştırılmış tabloya seyrek sütunlar eklenemez.
  • Veriler farklı sayıda sayfa ve sayfa başına satır sayısı kullanılarak depolandığından sıkıştırmanın etkinleştirilmesi sorgu planlarının değişmesine neden olabilir.