Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Kompresuj określoną partycję w tabeli w SQL Server (T-SQL)

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                    |
+--------------------+--------------------+-------------------------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobierz krótką nazwę dnia w SQL Server (T-SQL)

  2. SQL Server 2005 Używanie DateAdd do dodawania dnia do daty

  3. Dlaczego dostrajanie wydajności SQL jest najważniejszą umiejętnością zarządzania bazą danych?

  4. Jak wyświetlić listę plików w folderze z SQL Server

  5. ExecuteReader wymaga otwartego i dostępnego połączenia. Obecny stan połączenia to Łączenie