Sıkıştırılmış tablolar ve dizinler oluşturma

SQL Server 2008 hem satır hem de sayfa sıkıştırma, tablolar ve dizinler için destekler.Veri sıkıştırmayı, veritabanı aşağıdaki nesneler için yapılandırılabilir:

  • Bir yığın saklanan tüm tablo.

  • kümelenmiş dizin saklanan tüm tablo.

  • Tüm kümelenmemiş dizin.

  • Tüm dizinli görünüm.

  • Bölümlenmiş tablolar ve dizinler için sıkıştırma seçeneği, her bölüm için yapılandırılabilir ve nesneyi çeşitli bölümlerini sıkıştırma aynısına sahip gerekmez.

Bir tablo sıkıştırma ayarı, kümelenmemiş dizin için otomatik olarak uygulanmaz.Her dizin ayrı ayrı ayarlanmalıdır.Sıkıştırma, sistem tabloları için kullanılamaz.Kullanarak oluşturulduklarında tablolar ve dizinler sıkıştırılabilir TABLO OLUŞTURMA and DİZİN OLUŞTURMA deyimleri.Bir tablo, dizin veya bölüm, kullanımı sıkıştırılma durumunu değiştirmek için TABLO DEĞİŞTİRME or DİZİN DEĞİŞTİR deyimleri.

Not

Varolan verileri parçalanmışsa sıkıştırma yerine dizin yeniden oluşturma işlemi tarafından dizin boyutunu küçültebilirsiniz olabilir.doldurma faktörü bir dizinin Dizin boyutunu artırmak, bir dizin rebuild sırasında uygulanır.Daha fazla bilgi için bkz:Faktörü girin..

Dikkat edilmesi gereken noktalar (Bu bağlantı için zamanı kullan satır ve sayfa sıkıştırma

Satır ve sayfa sıkıştırma kullandığınızda, dikkate aşağıdaki önemli noktalar:

  • Sıkıştırma, yalnızca kullanılabilir SQL Server 2008 Kuruluş ve Developer sürümleri.

  • Sıkıştırma, bir sayfada depolanması daha fazla satır izin verebilirsiniz, ancak bir tablo ya da dizin en büyük satır boyutunu değiştirme.

  • En büyük satır boyutunu ve sıkıştırma yükü 8060 baytlık en büyük satır boyutunu aşarsa, BIR tablo için sıkıştırma etkinleştirilemez.Örneğin, sütun c1 olan tablo char(8000) ve c2 char(53) Ek sıkıştırma yükü nedeniyle sıkıştırılamaz. Vardecimal depolama biçimi kullanıldığında, satır boyutunu çek biçimi etkinleştirildiğinde gerçekleştirilir.Nesne başlangıçta sıkıştırılmış ve sonra her satır eklendiğinde veya değiştirildiğinde olarak işaretli satır ve sayfa sıkıştırma satır boyutu denetimi gerçekleştirilir.Sıkıştırma, aşağıdaki iki kuralı uygular:

    • Bir sabit uzunluklu türü için bir güncelleştirme her zaman başarılı olması gerekir.

    • Veri sıkıştırmasını devre dışı bırakmak her zaman başarılı olmalıdır.Sıkıştırılmış satır 8060 bayttan küçük; olduğunu gösterir sayfada sığıyorsa bile SQL Server sıkıştırılmamış olduğunda satır uyma güncelleştirmeleri engeller.

  • Bölümlerin listesini belirtildiğinde, sıkıştırma türü olabilir küme SATıR, SAYFA veya tek tek bir disk YOK.Bölümlerin listesini belirtilirse, tüm bölümleri olan küme deyimde belirtilen veri sıkıştırma özellik ile.Bir tablo ya da dizin oluşturulduğunda, veri sıkıştırmasını NONE olarak aksi belirtilmedikçe küme.Zaman bir tablo olduğu değişiklik, varolan sıkıştırma aksi belirtilmediği sürece korunur.

  • Disk bölümleri veya aralık dışı bir bölüm listesi belirlerseniz, bir hata oluşturulur.

  • Kümelenmemiş dizin sıkıştırma devralmaz özellik tablo.Dizinler sıkıştırmak için açıkça gerekir küme dizinleri sıkıştırma özelliği.Dizin oluşturulduğunda, varsayılan olarak, dizinler için sıkıştırma ayarını NONE olarak ayarlar.

  • Bir yığında kümelenmiş bir dizin oluşturduğunuzda, bir başka bir sıkıştırma durumu belirtilmediği sürece, kümelenmiş dizin öbek sıkıştırılma durumunu alır.

  • Yığın sayfa-için yapılandırıldığında düzey sıkıştırma, sayfalar sayfa-CVE-2006-almak düzey sıkıştırma yalnızca aşağıdaki yöntemlerle:

    • Veri BULK INSERT sözdizimi kullanılarak eklenir.

    • Veri, INSERT INTO kullanılarak eklenir...(TABLOCK) sözdizimi.

    • Bir tablo, ALTER TABLE'ı çalıştırarak yeniden...deyim sayfa sıkıştırma seçeneği ile yeniden OLUşTURUN.

  • Öbek yeniden kadar yeni sayfalar DML işlemlerinin bir parçası olarak yığın ayrılmış SAYFA sıkıştırma kullanmayacaktır.Öbek çıkarıp sıkıştırma yeniden uygulama veya kümelenmiş dizin kaldırılıyor oluşturup yeniden oluşturun.

  • Yığın sıkıştırma ayarını değiştirmek tüm kümelenmemiş dizin üzerinde gerektirir tablo, işaretçileri öbek yeni satır konumlarda sahip olacak biçimde yeniden oluşturulması.

  • Etkinleştirebilir veya çevrimiçi veya çevrimdışı SATıR veya SAYFA sıkıştırmasını devre dışı bırakın.Bir yığın üzerinde sıkıştırmayı etkinleştirme çevrimiçi bir operasyon için iş parçacığına sahip tek olur.

  • Etkinleştirmek veya satır veya sayfa sıkıştırma devre dışı bırakmak için disk alanı gereksinimleri oluşturmak veya bir dizin yeniden oluşturma için aynıdır.Bölümlenmiş verileri için etkinleştirerek veya bir seferde bir bölümü için sıkıştırma devre dışı bırakılması gereken boşluk azaltabilirsiniz.

  • bölümlenmiş tablo bölümleri sıkıştırılma durumunu belirlemek için , sys.partitions Katalog görünümü data_compression sütun sorgu.

  • Yaprak düzey sayfalar, dizinler sıkıştırma, hem satır hem de sayfa sıkıştırması ile sıkıştırılabilir.Non–yaprak düzey sayfalar, sayfa sıkıştırma almazsınız.

  • Büyüklükleri nedeniyle büyük değer veri türleri bazen ayrı normal satır verileri özel amaçlı sayfalarında depolanır.Veri sıkıştırma, ayrı ayrı depolanan veriler için kullanılabilir değil.

  • Vardecimal depolama biçiminde uygulanan tablo SQL Server 2005 o ayar yükseltildiğinde korur. Satır sıkıştırma için uygulayabileceğiniz bir tablo vardecimal depolama biçimi olan.Ancak, satır sıkıştırma vardecimal depolama biçimi anahtarının bir üst olduğundan, vardecimal depolama biçimi korumak için bir neden yoktur.Satır sıkıştırması ile vardecimal depolama biçimi birleştirdiğinizde Ondalıklı değerler, ek sıkıştırma elde edersiniz.Vardecimal depolama biçimi olan 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 değil.

    Not

    SQL Server 2008 destekler vardecimal depolama biçimi; ancak, aynı amaçları satır düzeyinde sıkıştırma erişir, çünkü vardecimal depolama biçimi önerilmiyor.This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

Sıkıştırma uygulama

Veri sıkıştırma uygulaması özeti için bkz: Satır sıkıştırma uygulama ve Sayfa sıkıştırma uygulama.

Sıkıştırma Savings hesaplanıyor

Nasıl sıkıştırma durumu bir tablo ya da dizin etkileyeceğini belirlemek için sp_estimate_data_compression_savings saklı yordam.Sp_estimate_data_compression_savings saklı yordamı yalnızca sürümlerini kullanılabilir SQL Server Veri sıkıştırmayı destekleyen.

Sıkıştırma, bölümlenmiş tablolar ve dizinler nasıl etkiler

Veri sıkıştırma bölümlendirilmiş tablolar ve dizinler ile kullanırken aşağıdaki önemli noktalar dikkat edin:

  • Bir aralık bölme

    Her iki bölüm, bölümler ALTER PARTITION deyimini kullanarak böldüğünüzde, özgün bölümün veri sıkıştırma özniteliği devralır.

  • Bir birleştirme

    Sonuç bölümü, iki bölüm birleştirildiğinde Hedef bölümünün veri sıkıştırma özniteliği devralır.

  • Bölümleri arasında geçiş yapma

    Bir bölüme geçmek için , bölüm veri sıkıştırma özelliğini tablo sıkıştırma özellik eşleşmesi gerekir.

  • Bir bölümü veya tüm bölümleri yeniden oluşturuluyor

    bölümlenmiş tablo ya da dizin durumunu değiştirmek için kullanabileceğiniz iki sözdizimi çeşitlemeleri vardır:

    • Aşağıdaki sözdizimini yalnızca başvurulan bölümü oluşturur:

      ALTER TABLE <table_name> 
      REBUILD PARTITION = 1 WITH (DATA_COMPRESSION =  <option>)
      
    • Aşağıdaki sözdizimini değil başvurulan tüm bölümler için ayarlama varolan sıkıştırma kullanarak, bütün tablo oluşturur:

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

    Bölümlenmiş dizinler aynı ilkeye ALTER ıNDEX'i kullanarak izleyin.

  • Bölümlendirilmiş bir kümelenmiş dizin siliniyor

    kümelenmiş dizin de çıkarılır, sürece, bölümleme şeması değiştirilmiş öbek karşılık gelen bölümler, veri sıkıştırma ayarını korur.Tüm bölümleri, bölümleme şeması değiştirilirse, sıkıştırılmamış bir duruma yeniden oluşturulur.Kümelenmiş bir dizini bırakma ve bölümleme düzenini değiştirmek için aşağıdaki adımları gerektirir:

    1.Drop the clustered index.

    2.Modify the table by using the ALTER TABLE ...REBUILD ...option that specifies the compression option.

    kümelenmiş dizin OFFLINE bırakılacağı çok hızlı bir işlem olduğundan kümelenmiş dizinler yalnızca üst düzeyde kaldırılır.kümelenmiş dizin ÇEVRIMIÇI olarak kesildiğinde SQL Server Öbek iki kez, adım 1 kez için ve adım 2'için bir kez yeniden oluşturmanız gerekir.

Sıkıştırma, çoğaltma nasıl etkiler

Veri sıkıştırması ile çoğaltma kullanırken aşağıdaki önemli noktalar dikkat edin:

  • Anlık Görüntü Aracısı ilk şema komut dosyası oluştururken, yeni şema aynı sıkıştırma ayarları her ikisi için kullanacağı tablo ve alt dizinleri.Sıkıştırma, yalnızca tablo ve dizin değil etkinleştirilemez.

  • Işlem çoğaltma için ne bağımlı nesneleri ve özellikleri komut dosyası gerekir, makale şemayı seçeneğini belirler.Daha fazla bilgi için bkz: sp_addarticle.

    Dağıtım aracı için denetleme kapalı-komut kaybettiğinde aboneleri düzey.Sıkıştırma çoğaltma için seçili ise, tablo oluşturma konusunda kapalı-düzey aboneleri başarısız olur.Içinde durum karma topolojisine, çoğaltma, sıkıştırma özelliğini etkinleştirmeyin.

  • Birleştirme çoğaltma, yayın uyumluluk düzey şema seçenekleri geçersiz kılar ve komut dosyası, şema nesneleri belirler.Uyumluluk düzey hakkında daha fazla bilgi için bkz: Bir çoğaltma topolojisi SQL Server birden çok sürümünü kullanma.

    Yeni sıkıştırma seçeneklerini desteklemek için gerekli değildir, söz konusu olduğunda, karma topoloji, yayın uyumluluk düzeyi alt düzey abone sürüme ayarlanması gerekir.Sonra bunlar oluşturulan, gerekirse, tabloyu abone sıkıştırın.

Aşağıdaki tablo sıkıştırma, çoğaltma sırasında denetim çoğaltma ayarlarını gösterir.

Kullanıcı hedefi

bölümleme düzeni için bir tablo ya da dizin çoğaltma

Sıkıştırma ayarlarını Çoğalt

komut dosyası kullanan kullanan dosyası kullanan davranışı

bölümleme düzeni Çoğalt bölüme abone sıkıştırmayı etkinleştirmek için.

True

True

bölümleme düzeni hem de sıkıştırma ayarları komut dosyaları.

bölümleme düzeni çoğaltmak, ancak abone verileri sıkıştırmak için.

True

False

Komut dosyaları bölümleme düzeni ancak değil ilgili bölümü sıkıştırma ayarları öğrenin.

bölümleme düzeni Çoğalt abone verileri sıkıştırmak için.

False

False

Disk bölümü veya sıkıştırma ayarları komut.

Sıkıştırılacak tablo tüm bölümler üzerinde yayımcı sıkıştırılır, ancak bölümleme düzeni Çoğalt abone üzerinde.

False

True

Tüm bölümler için sıkıştırma etkin olmadığını denetler.

Komut dosyaları Tablo düzeyinde sıkıştırma öğrenin.

Sıkıştırma, diğer SQL Server bileşenleri nasıl etkiler

Sıkıştırma depolama motoru oluşur ve verilerin diğer bileşenlerinin çoğunun sunulur SQL Server sıkıştırılmamış bir durumda. Bu diğer bileşenleri aşağıdaki sıkıştırmayı etkisini sınırlar:

  • Toplu olarak alma ve operasyonları verme

    Veri aktarıldığında bile özgün biçiminde sıkıştırılmamış satır biçiminde çıktı veridir.Bu, önemli ölçüde kaynak verileri büyük olacak şekilde dışa aktarılan veri dosyasının boyutu neden olabilir.

    Veri alındığında, hedef tablo için sıkıştırma etkinleştirilmişse, veri depolama motoru tarafından sıkıştırılmış satır biçimine dönüştürülür.Bu veriler, sıkıştırılmamış bir tabloya alındığında karşılaştırıldığında daha yüksek CPU kullanımına neden olabilir.

    Veri sayfa sıkıştırma ile bir yığın halinde alınan yığın olduğunda, toplu alma işleminin veri eklendiğinde, veri sayfa sıkıştırma ile Sıkıştırılacak deneyecek.

  • Sıkıştırma yok yedek etkiler ve geri yükleme.

  • Sıkıştırma, günlük aktarma etkilemez.

  • Sıkıştırmayı etkinleştirme, farklı bir sayfa sayısı ve sayfa başına satır sayısı'nı kullanarak verilerin saklanacağı sorgu planları neden olabilir.

  • Veri sıkıştırması tarafından destekleniyor SQL Server Management Studio - Veri sıkıştırma Sihirbazı.

Veri sıkıştırma Sihirbazı başlatmak için

  • Nesne Gezgini'nde, bir tablo, dizin veya dizinli görünüm, noktayı sağ tıklatın... Depolama sonra'ı tıklatınSıkıştırma.

Sıkıştırma izleme

Tam bir kopyasını sıkıştırma izlemek için SQL Server, sayfa sıkıştırma denemesi/sn ve erişim yöntemleri nesnesi, SQL Server sıkıştırılmış/sn sayaçlarının sayfaları'nı kullanın.

Her bölüm için sayfa sıkıştırma istatistikler elde etmek için , sys.dm_db_index_operational_stats dinamik yönetimi işlev sorgula.

Örnekler

Aşağıdaki örnek bölümlendirilmiş tablolarını kullanın ve bazı dosya grupları olan bir veritabanında gerektirir.Dosya grupları, var olan bir veritabanı oluşturmak için yürütmek aşağıdaki deyim.

CREATE DATABASE TestDatabase
ON  PRIMARY
( NAME = TestDatabase,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\TestDB.mdf'),
FILEGROUP test1fg
( NAME = TestDBFile1,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\TestDBFile1.mdf'),
FILEGROUP test2fg
( NAME = TestDBFile2,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\TestDBFile2.ndf'),
FILEGROUP test3fg
( NAME = TestDBFile3,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\TestDBFile3.ndf'),
FILEGROUP test4fg
( NAME = TestDBFile4,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\TestDBFile4.ndf') ;
GO

Yeni veritabanına geçiş yapmak için :

USE TestDatabase
GO

C.Bir tablo oluşturma satır sıkıştırma kullanır...

Aşağıdaki örnek, bir tablo oluşturur ve sıkıştırma ayarlar ROW.

CREATE TABLE T1 
(c1 int, c2 nvarchar(50) )
WITH (DATA_COMPRESSION = ROW);
GO

b.Bir tablo oluşturma sayfasına sıkıştırma kullanır...

Aşağıdaki örnek, bir tablo oluşturun ve sıkıştırma ayarlar PAGE.

CREATE TABLE T2 
(c1 int, c2 nvarchar(50) )
WITH (DATA_COMPRESSION = PAGE);
GO

c.DATA_COMPRESSION seçeneği ayarını bir bölümlenmiş tablo

Aşağıdaki örnek TestDatabase sağlanan kodu daha önce bu bölümü kullanarak oluşturduğunuz tablo. Örnek bölümleme işlevi ve düzenini oluşturur bölümlenmiş tablo oluşturur ve tablo bölümleri sıkıştırma seçeneklerini belirtir.Örneğin, bölüm 1 yapılandırıldı ROW sıkıştırma ve diğer bölümleri için yapılandırılmış PAGE sıkıştırma.

bölümleme işlevi oluşturmak için :

CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE LEFT FOR VALUES (1, 100, 1000) ;
GO

Bir bölümleme düzeni oluşturmak için :

CREATE PARTITION SCHEME myRangePS1
AS PARTITION myRangePF1
TO (test1fg, test2fg, test3fg, test4fg) ;
GO

bölümlenmiş tablo oluşturmak için bölümler sıkıştırılmış:

CREATE TABLE PartitionTable1 
(col1 int, col2 varchar(max))
ON myRangePS1 (col1) 
WITH 
(
  DATA_COMPRESSION = ROW ON PARTITIONS (1),
  DATA_COMPRESSION = PAGE ON PARTITIONS (2 TO 4)
);
GO

d.DATA_COMPRESSION seçeneği ayarını bir bölümlenmiş tablo

Aşağıdaki örnek, C örnekte kullanılan bir veritabanı kullanır.Örneğin, bitişik olmayan bölümler için sözdizimi'ni kullanarak bir tablo oluşturur.

CREATE TABLE PartitionTable2 
(col1 int, col2 varchar(max))
ON myRangePS1 (col1) 
WITH 
(
  DATA_COMPRESSION = ROW ON PARTITIONS (1,3),
  DATA_COMPRESSION = NONE ON PARTITIONS (2,4)
);
GO

e.Sıkıştırma değiştirmek için Tablo değiştirme

Aşağıdaki örnek, nonpartitioned sıkıştırmasını değiştirir tablo diğer bir deyişle, oluşturulmuş Örnek A'ya

ALTER TABLE T1 
REBUILD WITH (DATA_COMPRESSION = PAGE);
GO

f.Bir bölümün sıkıştırma değiştirme bir bölümlenmiş tablo

Aşağıdaki örnek sıkıştırmasını değiştirir bölümlenmiş tablo diğer bir deyişle, oluşturulmuş örnek cThe REBUILD PARTITION = 1 syntax causes only partition number 1 to be rebuilt.

ALTER TABLE PartitionTable1 
REBUILD PARTITION = 1 WITH (DATA_COMPRESSION =  NONE) ;
GO

Tüm bölümler aşağıdaki alternatif sözdizimini kullanan aynı işlem neden tablo yeniden oluşturulması.

ALTER TABLE PartitionTable1 
REBUILD PARTITION = ALL 
WITH (DATA_COMPRESSION = PAGE ON PARTITIONS(1) ) ;
GO

g.Bir bölümlerini durumunu değiştirme bir bölümlenmiş tablo

The REBUILD PARTITION = ... syntax can rebuild only one partition.Birden çok bölümün yeniden oluşturmak için , birden çok ifadeyi çalıştırmak veya bilinmeyen bölümleri için geçerli sıkıştırma ayarlarını kullanarak tüm bölümler, yeniden oluşturmak için aşağıdaki örnek yürütmek gerekir.

ALTER TABLE PartitionTable1 
REBUILD PARTITION = ALL 
WITH
(
DATA_COMPRESSION = PAGE ON PARTITIONS(1), 
DATA_COMPRESSION = ROW ON PARTITIONS(2 TO 4) 
) ;
GO

h.Dizin üzerinde sıkıştırma değiştirme

Aşağıdaki örnek tablo örnekte A oluşturulur ve sütunun üstüne bir dizin oluşturur C2.

CREATE NONCLUSTERED INDEX IX_INDEX_1 
    ON T1 (C2) 
WITH ( DATA_COMPRESSION = ROW ) ; 
GO

Dizin sayfa sıkıştırma için değiştirmek için şu kodu çalıştırın:

ALTER INDEX IX_INDEX_1 
ON T1
REBUILD WITH ( DATA_COMPRESSION = PAGE ) ;
GO

İ.bölümlenmiş dizin içinde tek bir bölüm durumunu değiştirme

Aşağıdaki örnek, dizinin tüm bölümlerde satır sıkıştırma kullanan bölümlendirilmiş bir tabloda bir dizin oluşturur.

CREATE CLUSTERED INDEX IX_PartTab2Col1
ON PartitionTable1 (Col1)
WITH ( DATA_COMPRESSION = ROW ) ;
GO

Dizin, farklı bölümlere farklı sıkıştırma ayarlarını kullanır böylece diğer bir deyişle oluşturmak için , ON PARTITIONS Sözdizimi. Aşağıdaki örnek bölümlenmiş tablo bölüme satır sıkıştırması kullanan bir dizin oluşturur... 1 Dizin ve sayfa sıkıştırmasını bölümlerdeki 2 Dizin 4 ile.

CREATE CLUSTERED INDEX IX_PartTab2Col1
ON PartitionTable1 (Col1)
WITH (DATA_COMPRESSION = ROW ON PARTITIONS(1),
    DATA_COMPRESSION = PAGE ON PARTITIONS (2 TO 4 ) ) ;
GO

Aşağıdaki örnek bölümlendirilmiş dizinin sıkıştırma değiştirir.

ALTER INDEX IX_PartTab2Col1 ON PartitionTable1
REBUILD PARTITION = ALL 
WITH ( DATA_COMPRESSION = PAGE ON PARTITIONS(1) ) ;
GO

j.bölümlenmiş dizin bölümlerini durumunu değiştirme

The REBUILD PARTITION = ... syntax can rebuild only one partition.Birden çok bölümün yeniden oluşturmak için , birden çok ifadeyi çalıştırmak veya bilinmeyen bölümleri için geçerli sıkıştırma ayarlarını kullanarak tüm bölümler, yeniden oluşturmak için aşağıdaki örnek yürütmek gerekir.

ALTER INDEX IX_PartTab2Col1 ON PartitionTable1
REBUILD PARTITION = ALL 
WITH
(
DATA_COMPRESSION = PAGE ON PARTITIONS(1), 
DATA_COMPRESSION = ROW ON PARTITIONS(2 TO 4) 
) ;
GO