次の方法で共有


ヒープのサイズを見積もる

次の手順を使用して、ヒープにデータを格納するために必要な領域の量を見積もることができます。

  1. テーブルに存在する行の数を指定します。

    Num_Rows = テーブル内の行数

  2. 固定長列と可変長列の数を指定し、そのストレージに必要なスペースを計算します。

    これらの列の各グループがデータ行内で占める領域を計算します。 列のサイズは、データ型と長さの指定によって異なります。

    Num_Cols = 列の合計数 (固定長および可変長)

    Fixed_Data_Size = すべての固定長列の合計バイト サイズ

    Num_Variable_Cols = 可変長列の数

    Max_Var_Size = すべての可変長列の最大合計バイト サイズ

  3. null ビットマップと呼ばれる行の一部は、列の null 値の許容を管理するために予約されています。 そのサイズを計算します。

    Null_Bitmap = 2 + ((Num_Cols + 7) / 8)

    この式の整数部分のみを使用する必要があります。 剰余を破棄します。

  4. 可変長データ サイズを計算します。

    テーブルに可変長列がある場合は、行内の列を格納するために使用される領域の量を決定します。

    Variable_Data_Size = 2 + (Num_Variable_Cols x 2) + Max_Var_Size

    Max_Var_Sizeに追加されるバイト数は、各可変長列を追跡するためです。 この数式では、すべての可変長列が 100% 満杯であることを前提としています。 可変長列ストレージ領域の割合が小さいと予想される場合は、その割合で Max_Var_Size 値を調整して、テーブル全体のサイズをより正確に見積もることができます。

    定義されたテーブルの幅の合計が 8,060 バイトを超える varcharnvarcharvarbinary、または sql_variant の列を組み合わせることができます。 これらの各列の長さは、 varcharnvarchar,``varbinary、または sql_variant 列の制限の 8,000 バイト以内である必要があります。 ただし、組み合わされた幅は、テーブル内の 8,060 バイトの制限を超える可能性があります。

    可変長列がない場合は、 Variable_Data_Size を 0 に設定します。

  5. 合計行サイズを計算します。

    Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4

    数式の値 4 は、データ行の行ヘッダーのオーバーヘッドです。

  6. ページあたりの行数を計算します (1 ページあたり 8,096 バイトの空きバイト)。

    Rows_Per_Page = 8096 / (Row_Size + 2)

    行はページをまたがないため、ページあたりの行数は最も近い整数行に切り捨てる必要があります。 数式の値 2 は、ページのスロット配列内の行のエントリを表します。

  7. すべての行を格納するために必要なページ数を計算します。

    Num_Pages = Num_Rows / Rows_Per_Page

    推定ページ数は、最も近い整数ページに切り上げる必要があります。

  8. ヒープにデータを格納するために必要な領域の量を計算します (1 ページあたり合計バイト数 8192)。

    ヒープ サイズ (バイト) = 8192 x Num_Pages

この計算では、次の点は考慮されません。

  • パーティショニング

    パーティション分割による領域のオーバーヘッドは最小限ですが、計算は複雑です。 含めるのは重要ではありません。

  • 割り当てページ

    ヒープに割り当てられたページを追跡するために使用される IAM ページは少なくとも 1 つありますが、領域のオーバーヘッドは最小限であり、使用される IAM ページの正確な数を決定論的に計算するアルゴリズムはありません。

  • ラージ オブジェクト (LOB) 値

    LOB データ型 varchar(max)varbinary(max)nvarchar(max)textntextxml、および image 値の格納に使用される領域を正確に決定するアルゴリズムは複雑です。 予想される LOB 値の平均サイズを追加し、それを合計ヒープ サイズに追加するだけで十分です。

  • 圧縮

    圧縮ヒープのサイズを事前に計算することはできません。

  • スパース列

    スパース列の領域要件については、「スパース列の 使用」を参照してください。

こちらもご覧ください

ヒープ (クラスター化インデックスのないテーブル)
クラスター化インデックスと非クラスター化インデックスの概念
クラスター化インデックスの作成
非クラスター化インデックスを作成する
テーブルのサイズを見積もる
クラスター化インデックスのサイズを見積もる
非クラスター化インデックスのサイズを見積もる
データベース サイズの見積もり