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

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

  • Bütün tablo bir yığın depolanır.

  • Bütün tablo kümelenmiş dizin depolanır.

  • 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 çeşitli bölümlerinin bir nesnenin aynı sıkıştırma ayarı yapmanız gerekmez.

Sıkıştırma ayarını bir tablo onun için kümelenmemiş dizinler otomatik olarak uygulanmaz.Her dizin olmalıdır küme tek tek.Sıkıştırma, sistem tabloları için kullanılamaz.Tablolar ve dizinler sıkıştırılmış kullanarak oluşturuldukları sırada create table ve create INDEX deyimleri.Bir tablo, dizin veya bölüm, kullanımı sıkıştırılma durumunu değiştirmek için alter table veya alter INDEX deyimleri.

Not

Varolan veri parçalanmışsa sıkıştırma kullanmak yerine dizini yeniden oluşturduğunuzda dizin boyutunu azaltmak olabilir.doldurma faktörü bir dizinin dizin boyutunu şansınızı artıran bir dizin yeniden sırasında uygulanacak.Daha fazla bilgi için bkz: Dolgu etmeni.

Ne zaman bir konular kullan satır ve sayfa sıkıştırma

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

  • Sıkıştırma yalnızca SQL Server 2008 Enterprise ve Developer sürümleri.

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

  • Satır boyutu artı 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 etkin duruma getirilemez.For example, a table that has the columns c1 char(8000) and c2 char(53) cannot be compressed because of the additional compression overhead.Vardecimal depolama biçimi kullanıldığında, biçim etkin olduğunda satır boyutu denetimi gerçekleştirilir.Satır ve sayfa sıkıştırması için nesne başlangıçta sıkıştırılmış ve sonra her satır eklendi veya değiştirildi olarak işaretli satır boyutu denetimi gerçekleştirilir.Sıkıştırma aşağıdaki iki kuralları zorlar.

    • 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.Başka bir deyişle, sayfa sıkıştırılmış satır sığdırır bile küçüktür 8060 baytı ise; SQL Servertetiklemeyecektir güncelleştirmeleri engeller uyma satırındaki açıldığında.

  • Bölümlerin listesini belirtilen sıkıştırma türü olabilir küme satır, sayfa veya tek tek bölümleri üzerinde yok.Bölümlerin listesini belirtilirse, belirtilen veri sıkıştırma özellik ile tüm bölümleri küme deyim.Bir tablo ya da dizin oluşturulduğunda, veri sıkıştırma yok aksi belirtilmedikçe küme.tablo değiştirirken, varolan sıkıştırma Aksi belirtilmediği sürece korunur.

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

  • Kümelenmemiş dizinleri devralır sıkıştırma özellik tablo.Dizinler sıkıştırmak için açıkça yapmalısınız küme dizinleri sıkıştırma özelliği.Varsayılan olarak, sıkıştırma kümebırakılacak dizinler için ting küme dizin oluşturulduğunda, yok.

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

  • Ne zaman bir yığın yapılandırılmış sayfa - içindüzey sıkıştırma, sayfaları alacak sayfa -düzey sıkıştırma yalnızca aşağıdaki yollarla:

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

    • INSERT INTO kullanarak veri ekleniyor...(tablock) sözdizimi ile.

    • alter tablo yürüterek bir tablosu yeniden...YENİDEN deyim sayfa sıkıştırma seçeneği ile.

  • Öbek oluşturulana kadar bir öbeğe dml işlemleri bir parçası olarak tahsis edilen yeni sayfaların sayfa sıkıştırma kullanır.Yığın kaldırmayı ve yeniden uygulama sıkıştırma veya oluşturma ve kaldırma kümelenmiş dizin yeniden oluşturun.

  • Bir yığın sıkıştırma ayarını değiştirmek, böylece yığınındaki yeni satır konumlarına işaretçiler sahip oldukları yeniden oluşturulması için tablo kümelenmemiş dizinlerde gerektirir.

  • Etkinleştirmek veya çevrimiçi veya çevrimdışı satır ya da sayfa sıkıştırmasını devre dışı bırakın.Bir yığın üzerinde sıkıştırmayı etkinleştirme için çevrimiçi işlem akıtılan tek.

  • Satır ya da sayfa sıkıştırma devre dışı bırakma veya etkinleştirme için disk alanı gereksinimleri oluşturmak veya bir dizin yeniden oluşturma aynıdır.Bölümlenmiş veri için etkinleştirerek veya sıkıştırma tek bir bölümde için devre dışı bırakılması gereken alanı azaltmak bir saat.

  • Bölümler sıkıştırma durumunu belirlemek için bir bölümlenmiş tablo, sorgu data_compression sütunu sys.partitions Katalog görünümü.

  • Dizinler sıkıştırmakta olduğunuz zaman, yaprak düzey sayfalar hem satır hem de sayfa sıkıştırması ile birleştirilebilir.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.

  • Tabloları vardecimal depolama uygulanan formatta SQL Server 2005 yükseltildiğinde bu ayarını korur.Satır sıkıştırma için uygulayabileceğiniz bir tablo , vardecimal depolama biçimi vardır. Ancak, satır sıkıştırmayı vardecimal depolama biçimi'nin bir üst olduğundan, vardecimal depolama biçimi korumak için hiçbir neden yoktur.Vardecimal depolama biçimi satır sıkıştırması ile birleştirdiğinizde ondalık değerleri ek sıkıştırma yok edersiniz.Vardecimal depolama biçimi olan bir tablo 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 etmez.

    Not

    SQL Server 2008 vardecimal depolama biçimi destekler; Ancak, çünkü satır -düzey sıkıştırma aynı hedef aldı, vardecimal depolama biçimi önerilmiyor.Bu özellik Microsoft SQL Server'ın ilerideki bir sürümünde kaldırılacaktır. Yeni geliştirme işlerinde bu özelliği kullanmaktan kaçının ve bu özelliği kullanmakta olan uygulamalarda değişiklik yapmayı planlayın.

Sıkıştırma uygulama

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

Tahmini sıkıştırma tasarrufları

Nasıl sıkıştırma durumunu değiştirme bir tablo veya bir dizin etkileyeceğini belirlemek için sp_estimate_data_compression_savings saklı yordam.The sp_estimate_data_compression_savings stored procedure is available only in the editions of SQL Server that support data compression.

Bölümlenmiş tablolar ve dizinler sıkıştırması nasıl etkiler

Veri sıkıştırma bölümlenmiş tablolar ve dizinler ile kullanırken aşağıdaki konuları dikkate alın:

  • Bir aralık bölme

    Bölümleri ne zaman bölmek alter bölüm kullanarak deyim, her iki bölümün orijinal bölümünün veri sıkıştırma öznitelik devralır.

  • aralık birleştirme

    İki bölüm birleştirildiğinde sonuç bölümü hedef bölüm veri sıkıştırma öznitelik devralır.

  • Bölümler 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 ya da tüm bölümleri yeniden inşa etmek

    Bölümlenmiş tablo veya dizin sıkıştırma değiştirmek için kullanabileceğiniz iki sözdizimi biçimi vardır:

    • Aşağıdaki sözdizimi 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 bütün tablo başvurulan tüm bölümler için ayarlama varolan sıkıştırması kullanılarak 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ı prensibi izleyin.

  • Bölümlenmiş kümelenmiş dizin siliniyor

    kümelenmiş dizin kesildiği zaman bölümleme şemasını değiştirme sürece karşılık gelen öbek bölümleri kendi veri sıkıştırma ayarını korur.Tüm bölümler, bölümleme düzeni değişirse, sıkıştırılmamış bir duruma yeniden oluşturulur.Kümelenmiş dizin bırakın ve bölümleme şemasını 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.

    Çevrimdışı kümelenmiş dizin bırakmak için çok hızlı bir işlem çünkü kümelenmiş dizinler yalnızca üst düzeydeki kaldırılır.kümelenmiş dizin çevrimiçi olarak kesildiği zaman SQL Server öbek adım 1 için bir kez ve bir kez adım 2 için iki kez döndürmelisiniz.

Çoğaltma sıkıştırması nasıl etkiler

Veri sıkıştırma ile çoğaltma kullanırken aşağıdaki konuları dikkate alın:

  • Anlık Görüntü Aracısı başlangıç şeması komut dosyasını oluşturduğunda, yeni şema tablo ve dizinleri için aynı sıkıştırma ayarlarını kullanır.Sıkıştırma, yalnızca tablo ve dizin etkin duruma getirilemez.

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

    Dağıtım Aracısı için aşağı - denetlemezdüzey komut uyguladığında aboneleri.Çoğaltma sıkıştırmayı seçtiyseniz, tablo oluşturma konusunda kapalı-düzey aboneleri başarısız olur.De durum karma topoloji, sıkıştırma çoğaltma etkinleştirmeyin.

  • Mektup birleştirme için çoğaltma, yayın uyumluluk düzey şema seçenekleri geçersiz kılar ve vermeyecekleri şema nesneleri belirler.Uyumluluk düzey hakkında daha fazla bilgi için bkz: sql Server birden çok sürümünü kullanarak bir çoğaltma topolojisi içinde.

    Karma topoloji olması durumunda, onu yeni sıkıştırma seçeneklerini desteklemek için gerekli değilse yayın uyumluluk düzeyi olmalıdır küme alt düzey abone sürüm.Gerekirse, bunlar oluşturulduktan sonra abone tablolarda sıkıştırın.

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

Kullanıcı amacı

Bir tablo ya da dizin bölümleme düzeni Çoğalt

Sıkıştırma ayarlarını çoğaltmak

Komut dosyası davranışı

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

True

True

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

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

True

False

bölümleme düzeni ancak sıkıştırma ayarları bölümü için değil dışarı komut dosyaları.

bölümleme düzeni çoğaltmak değil ve abone-gelen verileri sıkıştırmak için.

False

False

Bölüm veya sıkıştırma ayarları komut dosyası.

Sıkıştırmak için tablo abone tüm bölümler üzerinde yayımcı sıkıştırılır, ancak bölümleme düzeni çoğaltmak değil.

False

True

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

Komut dosyaları sıkıştırma sırasında dışarı tablo düzeyi.

Sıkıştırma diğer sql Server bileşenleri etkilemesi

Sıkıştırma oluşuyor depolama motoru ve diğer bileşenlerinin çoğu için sunulan veri SQL Server sıkıştırılmamış bir durum.Bu sıkıştırma işlemini diğer bileşenleri aşağıdaki etkilerini kısıtlar:

  • Toplu alma ve verme işlemleri

    Ne zaman veri aktarılır, hatta, yerel biçim, 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.

    Hedef Tablo için sıkıştırma etkinleştirilirse verileri içe aktarıldığında, veriler tarafından dönüştürülür depolama motoru sıkıştırılmış satır biçiminde.Bu verilerin sıkıştırılmamış bir alındığında karşılaştırıldığında daha yüksek cpu kullanımına neden tablo.

    Sayfa sıkıştırma ile bir yığın halinde alınan toplu veri olduğunda, toplu alma işleminin veri eklendiğinde, sayfa sıkıştırma ile verileri sıkıştırmak deneyecek.

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

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

  • Sıkıştırmayı etkinleştirme verileri kullanarak farklı bir sayfa sayısı ve sayfa başına satır sayısı olarak depolandığından değiştirmek sorgu planları neden olabilir.

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

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

  • Bir tablo, dizin veya dizinli görünüm noktasına Object Explorer'da sağ Depolamave i sıkıştırmak.

Sıkıştırma izleme

Tam sıkıştırma izlemek için örnek , SQL Server, kullanma Page compression attempts/sec ve Pages compressed/sec sayaçları SQL Server, Access Methods Object.

Tek tek bölümler için sayfa sıkıştırma İstatistikler elde etmek için sorgu sys.dm_db_index_operational_stats dinamik yönetim işlev.

Örnekler

Aşağıdaki örneklerden bazıları bölümlenmiş tabloları kullanın ve filegroups içeren bir veritabanını gerektirir.Filegroups içeren bir veritabanı oluşturmak için aşağıdaki deyim yürütmek.

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

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

USE TestDatabase
GO

A.Satır sıkıştırma kullanan bir tablo oluşturma

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.Sayfa sıkıştırması kullanan bir tablo oluşturma

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.bölümlenmiş tablo DATA_COMPRESSION seçeneği ayarlama

Aşağıdaki örnek TestDatabase sağlanan daha önce de kod kullanılarak oluşturulan tabloBu bölümde. Bu örnek oluşturur bir bölümleme işlev ve Düzen, bölümlenmiş tablo oluşturur ve Tablo bölümleri için sıkıştırma seçeneklerini belirtir.Bu örnekte, bölüm 1 için yapılandırılmış ROW için sıkıştırma ve geri kalan bölümleri yapılandırıldığını PAGE sıkıştırma.

Oluşturmak için bir bölümleme işlev:

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.bölümlenmiş tablo DATA_COMPRESSION seçeneği ayarlama

Aşağıdaki örnek, c. örnekte kullanılan veritabanı kullanır.Bu örnek, bitişik olmayan bölümler için sözdizimini 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 örnek a. oluşturulan nonpartitioned tablo sıkıştırmasını değiştirir

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

F.bölümlenmiş tablo tek bölümün sıkıştırma değiştirme

Aşağıdaki örnek c örnekte oluşturulmuş bölümlenmiş tablo sıkıştırma değiştirirThe REBUILD PARTITION = 1 syntax causes only partition number 1 to be rebuilt.

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

Aynı işlemi diğer aşağıdaki sözdizimini kullanan tüm bölümlerinde neden olan tablo yeniden oluşturulması.

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

G.Çeşitli bölümlerinde sıkıştırma değiştirme birbölümlenmiş tablo

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

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

H.Dizin sıkıştırmayı değiştirme

Aşağıdaki örnek tablo , örneğin bir oluşturulur ve sütun üzerinde bir dizin oluşturur C2.

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

Sayfa sıkıştırma için dizine değiştirmek için aşağıdaki kod yürütün:

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

Ö.bölümlenmiş dizin içinde bir tek bölümün sıkıştırma değiştirme

Aşağıdaki örnek, satır sıkıştırması kullanır dizinin tüm bölümlerde bölümlenmiş tablo üzerinde bir dizin oluşturur.

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

Farklı bölümleri için farklı sıkıştırma ayarlarını kullanır böylece yani dizin oluşturmak için kullanın ON PARTITIONS sözdizimi.Aşağıdaki örnek, satır sıkıştırması kullanan bir bölüme bölümlenmiş tablo üzerinde bir dizin oluşturur 1 bölümlerindeki dizin ve sayfa sıkıştırma 2 ile 4 dizin.

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, sıkıştırma bölümlenmiş dizin 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 içinde çeşitli bölümlerinin sıkıştırma değiştirme

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

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