sp_estimate_data_compression_savings (Transact-SQL)

現在のテーブル サイズ、および要求された圧縮状態での推定テーブル サイズを返します。圧縮は、テーブル全体またはテーブルの一部について評価できます。これには、ヒープ、クラスタ化インデックス、非クラスタ化インデックス、インデックス付きビュー、およびテーブル パーティションとインデックス パーティションが含まれます。テーブル構造は、行の圧縮またはページの圧縮を使用して圧縮できます。テーブル、インデックス、またはパーティションが既に圧縮されている場合は、このプロシージャを使用して、圧縮されなかった場合のテーブル、インデックス、またはパーティションのサイズを推定できます。

注意注意

圧縮および sp_estimate_data_compression_savings は、SQL Server 2008 の Enterprise Edition と Developer Edition でのみ使用できます。

要求された圧縮設定を使用した場合のオブジェクト サイズを推定するために、このストアド プロシージャでは、ソース オブジェクトがサンプリングされ、そのデータが tempdb に作成された同等のテーブルとインデックスに読み込まれます。さらに、tempdb に作成されたテーブルまたはインデックスが要求された設定に圧縮され、圧縮で削減される推定領域が計算されます。

テーブル、インデックス、またはパーティションの圧縮状態を変更するには、ALTER TABLE または ALTER INDEX ステートメントを使用します。圧縮の全般的な情報については、「圧縮されたテーブルおよびインデックスの作成」を参照してください。

注意注意

既存のデータが断片化されている場合は、インデックスを再構築することで、圧縮を使用しなくてもデータのサイズを削減できる可能性があります。インデックスについては、再構築中に FILL FACTOR が適用されます。これによってインデックスのサイズが増える可能性があります。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

sp_estimate_data_compression_savings 
      [ @schema_name = ] 'schema_name'  
     , [ @object_name = ] 'object_name' 
    , [@index_id = ] index_id 
     , [@partition_number = ] partition_number 
    , [@data_compression = ] 'data_compression' 
[;]

引数

  • [ @schema\_name = ] 'schema_name'
    テーブルまたはインデックス付きビューを含んでいるデータベース スキーマの名前です。schema_name は sysname です。schema_name が NULL の場合は、現在のユーザーの既定のスキーマが使用されます。

  • [ @object\_name = ] 'object_name'
    インデックスが有効になっているテーブルまたはインデックス付きビューの名前です。object_name は sysname です。

  • [ @index\_id = ] 'index_id'
    インデックスの ID です。index_id は int であり、指定できる値はインデックスの ID 番号、NULL、または 0 (object_id がヒープの場合) のいずれかです。ベース テーブルまたはビューのすべてのインデックスについて情報を返すには、NULL を指定します。NULL を指定する場合は、partition_number にも NULL を指定する必要があります。

  • [ @partition\_number = ] 'partition_number'
    オブジェクトのパーティション番号です。partition_number は int であり、指定できる値は、インデックスまたはヒープのパーティション番号、NULL、または 1 (非パーティション インデックスまたはヒープの場合) のいずれかです。

    パーティションを指定する場合は、$partition 関数も指定できます。所有するオブジェクトのすべてのパーティションについて情報を返すには、NULL を指定します。

  • [ @data\_compression = ] 'data_compression'
    評価される圧縮の種類です。data_compression には、NONE、ROW、PAGE のいずれかの値を指定できます。

リターン コードの値

0 (成功) または 1 (失敗)

結果セット

テーブル、インデックス、またはパーティションの現在のサイズと推定サイズの情報を提供する以下の結果セットが返されます。

列名

データ型

説明

object_name

sysname

テーブルまたはインデックス付きビューの名前。

schema_name

sysname

テーブルまたはインデックス付きビューのスキーマ。

index_id

int

インデックスのインデックス ID。

0 = ヒープ

1 = クラスタ化インデックス

> 1 = 非クラスタ化インデックス

partition_number

int

パーティション番号。非パーティション テーブルまたはインデックスの場合は 1 を返します。

size_with_current_compression_setting (KB)

bigint

要求されたテーブル、インデックス、またはパーティションの現在のサイズ。

size_with_requested_compression_setting (KB)

bigint

要求された圧縮設定を使用するテーブル、インデックス、またはパーティションの推定サイズ。該当する場合は既存の FILL FACTOR を適用し、断片化が生じていないことを前提としています。

sample_size_with_current_compression_setting (KB)

bigint

既存の圧縮設定を使用して作成されたサンプルのサイズ。該当する場合は既存の FILL FACTOR を適用し、断片化は考慮していません。この行セットは最初から作成されるため、断片化は生じません。

sample_size_with_requested_compression_setting (KB)

bigint

要求された圧縮設定を使用して作成されたサンプルのサイズ。該当する場合は既存の FILL FACTOR を適用し、断片化は考慮していません。

説明

sp_estimate_data_compression_savings は、テーブルまたはパーティションで行またはページの圧縮を有効にした場合に削減できる領域を推定する場合に使用します。たとえば、行の平均サイズを 40% 削減できれば、オブジェクトのサイズを 40% 削減できる可能性があります。これは FILL FACTOR と行サイズに左右されるため、領域を削減できない場合もあります。たとえば、長さ 8,000 バイトの行があり、そのサイズを 40% を削減したとしても、データ ページに収まるのは 1 行のみであることに変わりはないので、領域は削減されません。

sp_estimate_data_compression_savings を実行してテーブルが増大するという結果が示される場合は、テーブルの多くの行でデータ型の有効桁数がほとんど使用されており、圧縮された形式に必要なわずかなオーバーヘッドが積み重なって、圧縮による削減量を上回ることを意味しています。このようなまれなケースでは、圧縮を使用しないでください。

テーブルで圧縮が有効になっている場合は、sp_estimate_data_compression_savings を使用して、テーブルが圧縮されていない場合の平均行サイズを推定します。

この操作中に、テーブルで (IS) ロックが取得されます。(IS) ロックを取得できない場合は、プロシージャがブロックされます。テーブルは、READ COMMITTED 分離レベルでスキャンされます。

要求された圧縮設定が現在の圧縮設定と同じである場合は、ストアド プロシージャが既存の FILL FACTOR を使用して、データが断片化されていない状態での推定サイズを返します。

インデックス ID またはパーティション ID が存在しない場合は、結果が返されません。

権限

テーブルに対する SELECT 権限が必要です。

次の例では、AdventureWorks データベースの Production.WorkOrderRouting テーブルを、ROW 圧縮を使用して圧縮した場合のサイズを推定します。

USE AdventureWorks
GO
EXEC sp_estimate_data_compression_savings 'Production', 'WorkOrderRouting', NULL, NULL, 'ROW' ;
GO