Kiedy kompresujesz partycjonowaną tabelę w SQL Server, możesz skompresować wszystkie partycje, niektóre lub tylko jedną partycję.
Aby to zrobić, użyj REBUILD PARTITION
składnia w ALTER TABLE
oświadczenie.
Robiąc to, możesz odbudować tylko określoną partycję lub wszystkie partycje. Alternatywnie możesz odbudować wszystkie partycje, kompresując tylko określoną partycję lub listę partycji.
Przykład 1 – Odbuduj jedną partycję
W tym pierwszym przykładzie odbudowujemy i kompresujemy tylko jedną partycję w tabeli.
Oszacuj oszczędności na kompresji
Wyobraź sobie, że chcemy skompresować pojedynczą partycję w tabeli o nazwie Movies
.
Najpierw możemy użyć sp_estimate_data_compression_savings
systemowa procedura składowana w celu oszacowania oszczędności, jakie uzyskalibyśmy dzięki kompresji tabeli.
EXEC sp_estimate_data_compression_savings
@schema_name = 'dbo',
@object_name = 'Movies',
@index_id = NULL,
@partition_number = 3,
@data_compression = 'ROW';
Wynik (przy użyciu wyjścia pionowego):
object_name | Movies schema_name | dbo index_id | 1 partition_number | 3 size_with_current_compression_setting(KB) | 120 size_with_requested_compression_setting(KB) | 88 sample_size_with_current_compression_setting(KB) | 128 sample_size_with_requested_compression_setting(KB) | 96
Według sp_estimate_data_compression_savings
, rozmiar partycji powinien zmniejszyć się ze 120 KB do 88 KB po jej skompresowaniu.
Skompresuj partycję
Przejdźmy dalej i skompresujmy to.
ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = ROW);
W tym przypadku zastosowałem kompresję wierszy.
Sprawdź oszczędności kompresji
Teraz, jeśli zapytamy sp_estimate_data_compression_savings
ponownie zobaczymy, że obecny rozmiar jest teraz dokładnie taki, jak szacowano wcześniej (88 KB).
EXEC sp_estimate_data_compression_savings
@schema_name = 'dbo',
@object_name = 'Movies',
@index_id = NULL,
@partition_number = 3,
@data_compression = 'NONE';
Wynik (przy użyciu wyjścia pionowego):
object_name | Movies schema_name | dbo index_id | 1 partition_number | 3 size_with_current_compression_setting(KB) | 88 size_with_requested_compression_setting(KB) | 112 sample_size_with_current_compression_setting(KB) | 96 sample_size_with_requested_compression_setting(KB) | 128
W tym przykładzie otrzymuję oszacowanie wymagań dotyczących miejsca, gdybym miał usunąć kompresję (tj. ustawić ją na NONE
).
Sprawdź, które partycje używają kompresji
Możemy również użyć sys.partitions
widok, aby sprawdzić, czy partycja ma kompresję.
SELECT
[partition_number],
[data_compression],
[data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Wynik:
+--------------------+--------------------+-------------------------+ | partition_number | data_compression | data_compression_desc | |--------------------+--------------------+-------------------------| | 1 | 0 | NONE | | 2 | 0 | NONE | | 4 | 0 | NONE | | 3 | 1 | ROW | +--------------------+--------------------+-------------------------+
Usuń kompresję
Zanim przejdziemy do przykładu 2, usuńmy kompresję z partycji.
ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = NONE);
Przykład 2 – Kompresuj wiele partycji
W tym przykładzie odbudowujemy wszystkie partycje, ale określamy tylko te partycje, które chcemy skompresować.
Jest to metoda alternatywna do naszego pierwszego przykładu. Używając tej składni, możemy określić listę partycji do skompresowania.
ALTER TABLE Movies
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = ROW ON PARTITIONS(2,3));
W tym przypadku przebudowałem wszystkie partycje, ale skompresowałem tylko partycje 2 i 3.
Ponownie możemy użyć sys.partitions
aby sprawdzić, czy zostały skompresowane.
SELECT
[partition_number],
[data_compression],
[data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Wynik:
+--------------------+--------------------+-------------------------+ | partition_number | data_compression | data_compression_desc | |--------------------+--------------------+-------------------------| | 1 | 0 | NONE | | 2 | 1 | ROW | | 3 | 1 | ROW | | 4 | 0 | NONE | +--------------------+--------------------+-------------------------+