Tworzenie skompresowanego tabel i indeksów
SQL Server 2008 obsługuje kompresję wiersza i strona dla tabel i indeksów. Kompresję danych można skonfigurować dla następujących obiektów bazy danych:
Całej tabela jest przechowywana jako sterty.
Całej tabela jest przechowywana jako indeks klastrowany.
Całość indeks nieklastrowany.
Całość indeksowany widok.
Dla tabel podzielonym na partycje i indeksy opcja kompresji można skonfigurować dla każdej partycji i różnych partycji obiektu nie muszą mieć takie same ustawienia kompresji.
Ustawienie kompresji tabela nie jest automatycznie stosowane do jego zbudowania indeksów nie klastrowanych.Każdy indeks musi być zestaw indywidualnie.Kompresja nie jest dostępna dla tabele systemowe.Tabele i indeksy mogą być skompresowane, utworzone za pomocą Tworzenie tabeli i CREATE INDEX instrukcji.Do zmiany stanu kompresji tabela, indeks lub partycji, użyj ALTER tabela lub Zmianę INDEKSU instrukcji.
Ostrzeżenie
Jeśli istniejące dane jest pofragmentowany, można zmniejszyć rozmiar indeksu przebudowywanie indeksu zamiast kompresji.Współczynnik wypełnienia indeksu będą stosowane podczas przebudowy indeksu, który potencjalnie może zwiększyć rozmiar indeksu.Aby uzyskać więcej informacji, zobacz Współczynnik wypełnienia.
Zagadnienia dotyczące podczas używania wiersza i strony kompresji
Gdy używasz kompresji wiersza i strona, należy pamiętać, następujące kwestie:
Kompresja jest dostępne tylko w SQL Server 2008 wersje Enterprise i Developer.
Kompresji można zezwolić na więcej wierszy, które mają być przechowywane strona, ale nie zmienia maksymalny rozmiar wiersza tabela lub indeksu.
tabela nie można włączyć kompresję, gdy maksymalny rozmiar wiersza plus narzutów kompresji przekracza maksymalny rozmiar wiersza 8060 bajtów.For example, a table that has the columns c1 char(8000) and c2 char(53) cannot be compressed because of the additional compression overhead.Gdy używany jest format przechowywania vardecimal, sprawdzanie rozmiar wiersza jest wykonywane, gdy jest włączony format.Kompresji wiersza i strona wyboru rozmiar wiersza jest wykonywane, gdy obiekt jest początkowo skompresowany i następnie sprawdzane każdy wiersz został wstawiony lub zmodyfikowany.Kompresja wymusza następujące dwie reguły:
Aktualizacja typ stałej długości zawsze musi zakończyć się sukcesem.
Wyłączenie kompresji danych należy zawsze powiodła się.Nawet jeśli skompresowany wiersza mieści się strona, co oznacza, że jest 8060 bajtów; SQL Serverzapobiega aktualizacji, które nie dopasowanie w wierszu po kompresji.
Gdy określono listę partycji zestaw typ kompresji do wiersza, strony lub brak na poszczególnych partycji.Jeśli na liście partycji nie zostanie określony, wszystkie partycje są zestaw z właściwość kompresji danych określona w instrukcja.Po utworzeniu tabela lub indeksie kompresja danych jest zestaw Brak chyba że ustalono inaczej.Podczas modyfikowania tabela istniejącej kompresji jest zachowywany, chyba że ustalono inaczej.
Jeśli określić listę partycji lub partycji, która jest z zakres, zostanie wygenerowany błąd.
Ponownego zbudowania indeksów nie dziedziczą właściwość kompresji tabela.Aby skompresować indeksów, należy jawnie zestaw właściwość kompresji indeksów.Domyślnie kompresja zestawwyrównywania dla indeksów będzie zestaw Brak podczas tworzenia indeksu.
Po utworzeniu indeksu klastrowanego w sterty indeks klastrowany dziedziczy stanu kompresji sterty nie określono stanu kompresji alternatywnych.
Po skonfigurowaniu sterty kompresji poziom strona, strona wyświetlany kompresji poziom strona tylko w następujący sposób:
Danych zostanie wstawiony za pomocą składni WSTAW luzem.
Wstawiane dane przy użyciu INSERT INTO...ZE składnią (TABLOCK).
Wykonując ALTER tabela jest odbudowywany tabela...ODBUDUJ instrukcja z opcją kompresji strony.
Nowych stron, przydzielane w sterty jako część operacje DML nie będzie używać kompresji stronę, aż odbudowany sterty.Odbuduj sterty przez usunięcie i ponowne stosowanie kompresji lub tworzenie i usuwanie indeks klastrowany.
Zmiana ustawienia kompresji sterty wymaga wszystkich zbudowania indeksów w tabela przebudowania, tak aby miały wskaźniki do nowych lokalizacji wiersza w stercie.
Można włączyć lub wyłączyć kompresję wiersza lub strony online lub offline.Włączanie kompresji w sterty jest pojedynczym wątku dla operacji online.
Wymagania dotyczące miejsca na dysku do włączania lub wyłączania kompresji wiersza lub strona są takie same, jak w przypadku tworzenia lub odbudowanie indeksu.Dla danych podzielonym na partycje, można zmniejszyć ilość miejsca, wymagane przez włączenie lub wyłączenie kompresji dla jednej partycji na czas.
Do określania stanu kompresji partycji w tabela partycjonowana, kwerendy data_compression kolumna sys.partitions wykazu widoku.
Podczas kompresji indeksy, liść-mogą być skompresowane strona poziom kompresji wiersza i strona.strona poziom non–liść strona kompresji nie jest wyświetlany.
Ze względu na ich rozmiar typów danych dużą wartość są czasami przechowywane oddzielnie od normalnych wiersz danych na stronach specjalnego przeznaczenia.Kompresja danych nie jest dostępna dla danych, które są przechowywane oddzielnie.
Formatowanie tabel, które wdrożone Magazyn vardecimal w SQL Server 2005 zachowa ustawienie po uaktualnieniu.Można zastosować kompresji wiersz do tabela, która ma format magazynu vardecimal. Jednak ponieważ kompresja wiersza jest nadzbiorem formatu vardecimal, nie ma żadnego powodu, aby zachować format przechowywania vardecimal.Wartości dziesiętne uzyskać nie dodatkowych kompresji przy łączeniu vardecimal formatu z kompresją wiersza.Kompresja strona można zastosować do tabela, która ma format przechowywania vardecimal; jednak vardecimal magazynu Formatuj kolumny prawdopodobnie nie spowoduje osiągnięcia dodatkowych kompresji.
Ostrzeżenie
SQL Server 2008 obsługuje format przechowywania vardecimal; Jednakże ponieważ wiersz poziom kompresji uzyskuje te same cele, format przechowywania vardecimal została zaniechana.Ta funkcja zostanie usunięta z przyszłej wersji programu Microsoft SQL Server. Należy unikać stosowania tej funkcji w nowych projektach oraz zaplanować modyfikację aplikacji, w których obecnie jest używana ta funkcja.
Implementacja kompresji
Podsumowanie wykonania kompresji danych, zobacz Implementacja kompresji wiersza, Implementacja kompresji strony, i Implementacja Kompresja Unicode.
Szacowanie oszczędności kompresji
Aby określić, jak zmiana stanu kompresji będą wpływać na tabela lub indeksu, użyj sp_estimate_data_compression_savings procedura składowana. sp_estimate_data_compression_savings procedura składowana jest dostępne tylko w wersjach SQL Server , obsługuje kompresję danych.
Wpływ kompresji na partycje, tabel i indeksów
Podczas korzystania z kompresji danych z tabel podzielonym na partycje i indeksów, należy pamiętać o następujące kwestie:
Dzielenie zakres
Partycje są podzielone przy użyciu instrukcja ALTER PARTYCJI, zarówno partycje dziedziczyły atrybut kompresji danych oryginalnego partycji.
Scalanie zakres
Gdy scalane są dwie partycje, wynikowy partycji dziedziczy atrybut kompresji danych obiekt docelowy partycji.
Przełączanie partycji
Aby przełączyć się na partycji, właściwość kompresji danych partycji musi odpowiadać kompresji właściwość tabela.
Odbudowywanie jedną partycję lub wszystkie partycje
Istnieją dwa warianty składni, których można zmodyfikować kompresji tabela partycjonowana lub indeksu:
Następująca składnia odbudowuje odwołanie partycji:
ALTER TABLE <table_name> REBUILD PARTITION = 1 WITH (DATA_COMPRESSION = <option>)
Następująca składnia odbudowuje całej tabela przy użyciu kompresji istniejące ustawienie wszystkie partycje, które nie pochodzą:
ALTER TABLE <table_name> REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE ON PARTITIONS(<range>), ... )
Indeksy podzielonym na partycje wykonaj sama zasada przy użyciu INDEKSU ALTER.
Upuszczanie podzielonym na partycje indeks klastrowany
Po upuszczeniu indeks klastrowany odpowiednie partycje sterty zachować ich ustawienie kompresji danych, chyba że modyfikacji schematu partycjonowanie na partycje.Po zmianie schematu partycjonowanie na partycje do nieskompresowany odbudowa wszystkie partycje.Aby usunąć indeks klastrowany i zmienić partycjonowanie schemat wymaga następujących kroków:
1.Drop the clustered index.
2.Modify the table by using the ALTER TABLE ...REBUILD ...option that specifies the compression option.
Upuść indeks klastrowany w trybie OFFLINE jest bardzo szybko operacji, ponieważ są usuwane tylko wyższe poziomy indeksów klastrowanych.Po upuszczeniu indeks klastrowany w trybie ONLINE, SQL Server należy odbudować sterty dwa razy, raz w kroku 1, a raz w kroku 2.
Wpływ kompresji replikacji
Kiedy używasz kompresji danych z replikacja, należy zwrócić uwagę na następujące kwestie:
Gdy Agent migawki generuje skrypt wstępny schemat, nowy schemat będzie używać tych samych ustawień kompresji w tabela i jej indeksów.Nie można włączyć kompresję tylko tabela i nie indeksu.
Dla replikacja transakcyjna artykuł opcja schemat określa, jakie obiekty zależne i właściwości muszą być inicjowane przez skrypty.Aby uzyskać więcej informacji, zobacz sp_addarticle.
Nie sprawdza agenta dystrybucji niedziałający-poziom abonentów, gdy dotyczy skryptów.Replikacja kompresji jest zaznaczone, tworzenie tabela na niedziałający-subskrybentów poziom nie powiedzie się.W przypadek mieszanych topologii, nie należy włączać replikacja kompresji.
Dla replikacja scalająca publikacja poziom zgodności zastępuje opcje schematu i określa obiektów schematu, które będą inicjowane przez skrypty.Aby uzyskać więcej informacji na temat poziom zgodności, zobacz W topologii replikacji przy użyciu wielu wersji programu SQL Server.
W odniesieniu do mieszanych topologii, jeśli nie jest wymagany do obsługi nowych opcji kompresji, poziom zgodności publikacja powinny być zestaw wersja niskiego poziomu subskrybenta.Jeśli jest to wymagane, można skompresować tabel na subskrybenta po ich utworzeniu.
W poniższej tabela przedstawiono ustawienia replikacja, sterujące kompresji podczas replikacja.
Zamiarem użytkownika |
Replikuj schemat partycji dla tabela lub indeksu |
Replikowanie ustawień kompresji |
Zachowanie skryptów |
---|---|---|---|
Aby replikować schemat partycji i włączenia kompresji subskrybenta na partycji. |
Prawda |
Prawda |
Skrypty schemat partycji i ustawienia kompresji. |
Aby replikować schemat partycji, ale nie kompresuj danych subskrybenta. |
Prawda |
Fałsz |
Skrypty schemat partycji, ale nie ustawienia kompresji dla partycji. |
Nie replikuj schemat partycji i nie kompresuj danych subskrybenta. |
Fałsz |
Fałsz |
Ustawienia partycji lub kompresji nie skryptów. |
Kompresowanie tabela na subskrybenta, jeżeli wszystkie partycje są kompresowane Wydawca, ale nie replikować schemat partycji. |
Fałsz |
Prawda |
Sprawdza, czy wszystkie partycje są włączone dla kompresji. Skrypty poza kompresji poziom tabela. |
Kompresja wpływ innych SQL Server składników
Kompresja występuje w aparat magazynu i przedstawiania danych do większości innych składników SQL Server w stanie nieskompresowane.Ogranicza skutki kompresji na inne składniki do następującego:
Luzem importu i eksportu operacji
Po wyeksportowaniu danych, nawet w format macierzysty, dane są dane wyjściowe w formacie wiersza bez kompresji.Może to spowodować rozmiar wyeksportowany plik danych będzie znacznie większy niż źródło danych.
Podczas importowania danych, jeśli w tabela miejsce docelowe została włączona kompresja, przekonwertowaniu danych przez aparat magazynu w formacie skompresowanym wiersza.Może to spowodować zwiększone użycie Procesora w porównaniu z podczas importowania danych do tabela bez kompresji.
Gdy dane są przywożone do sterty kompresji strona luzem, operacji import zbiorczy próbuje skompresować dane z kompresją strona po wstawieniu danych.
Kompresja nie wpływa na kopia zapasowa i przywracanie.
Kompresja nie wpływa na wysyłanie dziennika.
Włączanie kompresji może spowodować planów kwerend zmienić, ponieważ dane są przechowywane przy użyciu innej liczby stron i liczbę wierszy na strona.
Kompresja danych jest obsługiwany przez SQL Server Management Studio przez Kreatora kompresji danych.
Aby uruchomić Kreatora kompresji danych
- W Eksploratorze obiektów, kliknij prawym przyciskiem myszy tabela, indeks lub indeksowany widok, wskaż Magazyn, a następnie kliknij przycisk Kompresuj.
Monitorowanie kompresji
Monitorowanie kompresji całego wystąpienie SQL Server, użyj Page compression attempts/sec i Pages compressed/sec liczników SQL Server, Access Methods Object.
Uzyskanie strona statystyki kompresji dla poszczególnych partycji, kwerenda sys.dm_db_index_operational_stats funkcja dynamicznego zarządzania.
Przykłady
Następujące przykłady tabele podzielonym na partycje i wymagają bazy danych zawierającej aplikacjami.Tworzenie bazy danych zawierającej aplikacjami, należy wykonać następujące instrukcja.
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
Aby przełączyć się do nowej bazy danych:
USE TestDatabase
GO
A.Tworzenie tabela używa kompresji wiersza
Poniższy przykład tworzy tabela i ustawia kompresji ROW.
CREATE TABLE T1
(c1 int, c2 nvarchar(50) )
WITH (DATA_COMPRESSION = ROW);
GO
B.Tworzenie tabela używa kompresji strona
Poniższy przykład utworzyć tabela i ustawia kompresji PAGE.
CREATE TABLE T2
(c1 int, c2 nvarchar(50) )
WITH (DATA_COMPRESSION = PAGE);
GO
C.Ustawianie opcji DATA_COMPRESSION na podzielonym na partycjetabela
W poniższym przykładzie użyto TestDatabase tabela, który jest tworzony przy użyciu kodu wcześniej w tej sekcji.Przykład tworzy funkcja partycji i systemu, a następnie tworzy tabela partycjonowana i określa opcje kompresji dla partycji tabeli.W tym przykładzie partycji 1 jest skonfigurowany dla ROW pozostałe partycje i kompresji, są konfigurowane dla PAGE kompresji.
Aby utworzyć funkcja partycji:
CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE LEFT FOR VALUES (1, 100, 1000) ;
GO
Aby utworzyć schemat partycji:
CREATE PARTITION SCHEME myRangePS1
AS PARTITION myRangePF1
TO (test1fg, test2fg, test3fg, test4fg) ;
GO
Aby utworzyć tabela partycjonowana, zostały skompresowane partycji:
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.Ustawianie opcji DATA_COMPRESSION na podzielonym na partycjetabela
Poniższy przykład używa bazy danych, który jest używany w przykładzie C.Przykład tworzy tabela przy użyciu składni dla partycji nieciągłe.
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.Modyfikowanie tabela, aby zmienić kompresji
W poniższym przykładzie zmieniany kompresji nonpartitioned tabela, która jest tworzona w przykładzie A.
ALTER TABLE T1
REBUILD WITH (DATA_COMPRESSION = PAGE);
GO
F.Modyfikowanie kompresji jedną partycję w podzielonym na partycjetabela
W poniższym przykładzie zmieniany kompresji tabela partycjonowana, która jest tworzona w przykładzie C.REBUILD PARTITION = 1 Składni powoduje tylko numer partycji 1 wymagają przebudowania.
ALTER TABLE PartitionTable1
REBUILD PARTITION = 1 WITH (DATA_COMPRESSION = NONE) ;
GO
Operację używa następującej składni alternatywny powoduje, że wszystkie partycje tabela wymagają przebudowania.
ALTER TABLE PartitionTable1
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = PAGE ON PARTITIONS(1) ) ;
GO
G.Modyfikowanie kompresji kilka partycji w podzielonym na partycjetabela
REBUILD PARTITION = ... Składni można odbudować tylko jedna partycja.Odbudować więcej niż jedną partycję, należy wykonać instrukcje wielu lub wykonać poniższy przykład odbudować wszystkie partycje przy użyciu bieżących ustawień kompresji dla nieokreślonego partycji.
ALTER TABLE PartitionTable1
REBUILD PARTITION = ALL
WITH
(
DATA_COMPRESSION = PAGE ON PARTITIONS(1),
DATA_COMPRESSION = ROW ON PARTITIONS(2 TO 4)
) ;
GO
H.Modyfikowanie kompresji w indeksie
Poniższy przykład używa tabela, która jest tworzona w przykładzie a i tworzy indeks dla kolumna C2.
CREATE NONCLUSTERED INDEX IX_INDEX_1
ON T1 (C2)
WITH ( DATA_COMPRESSION = ROW ) ;
GO
Wykonanie następującego kodu zmiany indeksu strona kompresji:
ALTER INDEX IX_INDEX_1
ON T1
REBUILD WITH ( DATA_COMPRESSION = PAGE ) ;
GO
I.Modyfikowanie kompresji jednej partycji indeks partycjonowany
Poniższy przykład tworzy indeks dla tabela partycjonowana że używa wierszy kompresji na wszystkich partycjach indeksu.
CREATE CLUSTERED INDEX IX_PartTab2Col1
ON PartitionTable1 (Col1)
WITH ( DATA_COMPRESSION = ROW ) ;
GO
Aby utworzyć indeks wtedy ustawienia kompresji różnych zastosowań dla różnych partycjach, ON PARTITIONS składni.Poniższy przykład tworzy indeks dla tabela partycjonowana że używa wierszy kompresji na partycji 1 Indeks i strona kompresji na partycjach 2 do 4 indeks.
CREATE CLUSTERED INDEX IX_PartTab2Col1
ON PartitionTable1 (Col1)
WITH (DATA_COMPRESSION = ROW ON PARTITIONS(1),
DATA_COMPRESSION = PAGE ON PARTITIONS (2 TO 4 ) ) ;
GO
W poniższym przykładzie zmieniany kompresji indeks partycjonowany.
ALTER INDEX IX_PartTab2Col1 ON PartitionTable1
REBUILD PARTITION = ALL
WITH ( DATA_COMPRESSION = PAGE ON PARTITIONS(1) ) ;
GO
J.Modyfikowanie kompresji kilka partycji indeks partycjonowany
REBUILD PARTITION = ... Składni można odbudować tylko jedna partycja.Odbudować więcej niż jedną partycję, należy wykonać instrukcje wielu lub wykonać poniższy przykład odbudować wszystkie partycje przy użyciu bieżących ustawień kompresji dla nieokreślonego partycji.
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