SQL Serverでパーティションテーブルを圧縮する場合、すべてのパーティション、一部、または1つのパーティションのみを圧縮できます。
これを行うには、REBUILD PARTITION
を使用します ALTER TABLE
内の構文 声明。
これを行うと、指定したパーティションのみまたはすべてのパーティションを再構築できます。または、特定のパーティションまたはパーティションのリストのみを圧縮しながら、すべてのパーティションを再構築することもできます。
例1-1つのパーティションを再構築する
この最初の例では、テーブル内の1つのパーティションのみを再構築して圧縮します。
圧縮による節約の見積もり
Movies
というテーブルの単一のパーティションを圧縮したいとします。 。
まず、sp_estimate_data_compression_savings
を使用できます テーブルを圧縮することで得られる節約を見積もるためのシステムストアドプロシージャ。
EXEC sp_estimate_data_compression_savings
@schema_name = 'dbo',
@object_name = 'Movies',
@index_id = NULL,
@partition_number = 3,
@data_compression = 'ROW';
結果(垂直出力を使用):
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
sp_estimate_data_compression_savings
によると 、圧縮すると、パーティションサイズは120KBから88KBに減少するはずです。
パーティションを圧縮する
先に進んで圧縮しましょう。
ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = ROW);
この場合、行圧縮を使用しました。
圧縮の節約を確認する
ここで、sp_estimate_data_compression_savings
をクエリすると 繰り返しになりますが、現在のサイズが以前に見積もられたとおりになっていることがわかります(88KB)。
EXEC sp_estimate_data_compression_savings
@schema_name = 'dbo',
@object_name = 'Movies',
@index_id = NULL,
@partition_number = 3,
@data_compression = 'NONE';
結果(垂直出力を使用):
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
この例では、圧縮を削除した場合(つまり、NONE
に設定した場合)に必要なスペースの見積もりを取得しています。 。
どのパーティションが圧縮を使用しているかを確認する
sys.partitions
を使用することもできます パーティションが圧縮されていることを確認するために表示します。
SELECT
[partition_number],
[data_compression],
[data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
結果:
+--------------------+--------------------+-------------------------+ | partition_number | data_compression | data_compression_desc | |--------------------+--------------------+-------------------------| | 1 | 0 | NONE | | 2 | 0 | NONE | | 4 | 0 | NONE | | 3 | 1 | ROW | +--------------------+--------------------+-------------------------+
圧縮を削除
例2に進む前に、パーティションから圧縮を削除しましょう。
ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = NONE);
例2–複数のパーティションを圧縮する
この例では、すべてのパーティションを再構築しますが、圧縮するパーティションのみを指定します。
これは、最初の例の代替方法です。この構文を使用して、圧縮するパーティションのリストを指定できます。
ALTER TABLE Movies
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = ROW ON PARTITIONS(2,3));
この場合、すべてのパーティションを再構築しましたが、圧縮したのはパーティション2と3のみです。
ここでも、sys.partitions
を使用できます 圧縮されていることを確認します。
SELECT
[partition_number],
[data_compression],
[data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
結果:
+--------------------+--------------------+-------------------------+ | partition_number | data_compression | data_compression_desc | |--------------------+--------------------+-------------------------| | 1 | 0 | NONE | | 2 | 1 | ROW | | 3 | 1 | ROW | | 4 | 0 | NONE | +--------------------+--------------------+-------------------------+