sql >> Databáze >  >> RDS >> Sqlserver

Komprimace konkrétního oddílu v tabulce na serveru SQL Server (T-SQL)

Když komprimujete rozdělenou tabulku na SQL Server, můžete komprimovat všechny oddíly, některé nebo pouze jeden oddíl.

Chcete-li to provést, použijte REBUILD PARTITION syntaxe v ALTER TABLE prohlášení.

Když to uděláte, můžete znovu sestavit pouze určený oddíl nebo všechny oddíly. Případně můžete znovu sestavit všechny oddíly a přitom zkomprimovat pouze konkrétní oddíl nebo seznam oddílů.

Příklad 1 – Znovu sestavit jeden oddíl

V tomto prvním příkladu znovu sestavíme a zkomprimujeme pouze jeden oddíl v tabulce.

Odhadněte úspory komprese

Představte si, že chceme zkomprimovat jeden oddíl v tabulce s názvem Movies .

Nejprve můžeme použít sp_estimate_data_compression_savings systémová uložená procedura k odhadu úspor, které bychom získali komprimací tabulky.

EXEC sp_estimate_data_compression_savings 
    @schema_name = 'dbo', 
    @object_name = 'Movies', 
    @index_id = NULL, 
    @partition_number = 3, 
    @data_compression = 'ROW';

Výsledek (při použití vertikálního výstupu):

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

Podle sp_estimate_data_compression_savings , velikost oddílu by se měla zmenšit ze 120 KB na 88 KB, jakmile jej zkomprimujeme.

Komprimujte oddíl

Pojďme to zkomprimovat.

ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = ROW);

V tomto případě jsem použil kompresi řádků.

Ověřte kompresní úspory

Nyní, když se zeptáme na sp_estimate_data_compression_savings opět uvidíme, že aktuální velikost je nyní přesně taková, jaká byla dříve odhadována (88 kB).

EXEC sp_estimate_data_compression_savings 
    @schema_name = 'dbo', 
    @object_name = 'Movies', 
    @index_id = NULL, 
    @partition_number = 3, 
    @data_compression = 'NONE';

Výsledek (při použití vertikálního výstupu):

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

V tomto příkladu získávám odhad prostorových požadavků, pokud bych měl odstranit kompresi (tj. nastavit ji na NONE ).

Ověřte, které oddíly používají kompresi

Můžeme také použít sys.partitions zobrazit, abyste ověřili, že oddíl má kompresi.

SELECT
    [partition_number],
    [data_compression],
    [data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');

Výsledek:

+--------------------+--------------------+-------------------------+
| partition_number   | data_compression   | data_compression_desc   |
|--------------------+--------------------+-------------------------|
| 1                  | 0                  | NONE                    |
| 2                  | 0                  | NONE                    |
| 4                  | 0                  | NONE                    |
| 3                  | 1                  | ROW                     |
+--------------------+--------------------+-------------------------+

Odstranit kompresi

Než přejdeme k příkladu 2, odeberme kompresi z oddílu.

ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = NONE);

Příklad 2 – Komprimace více oddílů

V tomto příkladu znovu sestavíme všechny oddíly, ale určíme pouze oddíly, které chceme komprimovat.

Toto je alternativní metoda k našemu prvnímu příkladu. Pomocí této syntaxe můžeme specifikovat seznam oddílů ke komprimaci.

ALTER TABLE Movies
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = ROW ON PARTITIONS(2,3));

V tomto případě jsem přestavěl všechny oddíly, ale zkomprimoval jsem pouze oddíly 2 a 3.

Opět můžeme použít sys.partitions abyste ověřili, že byly komprimovány.

SELECT
    [partition_number],
    [data_compression],
    [data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');

Výsledek:

+--------------------+--------------------+-------------------------+
| partition_number   | data_compression   | data_compression_desc   |
|--------------------+--------------------+-------------------------|
| 1                  | 0                  | NONE                    |
| 2                  | 1                  | ROW                     |
| 3                  | 1                  | ROW                     |
| 4                  | 0                  | NONE                    |
+--------------------+--------------------+-------------------------+


  1. Jak změnit hodnoty pro úpravy horních X a výběr horních X řádků v SQL Server Management Studio (SSMS) - SQL Server / Výukový program TSQL, část 20

  2. Jak INTERSECT funguje v PostgreSQL

  3. Co zkontrolovat, zda je využití paměti PostgreSQL vysoké

  4. Jak zřetězit více řádků do jednoho sloupce v MySQL