sql >> データベース >  >> RDS >> Sqlserver

SQL Server(T-SQL)のテーブル内の特定のパーティションを圧縮する

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


    1. マルチクラウドデータベースでのMySQLスプリットブレインの排除

    2. SQL Server 2016のSTRING_SPLIT():フォローアップ#2

    3. MySQLで複数の列を検索する方法は?

    4. AmazonAWSでのMySQLまたはMariaDBデータベースのコールドスタンバイの構築