インデックスが作成、再構築、または削除されるたびに、適切なファイルとファイル グループには、古い (ソース) 構造体と新しい (ターゲット) 構造体の両方のディスク領域が必要です。 古い構造の割り当ては、インデックス作成トランザクションがコミットされるまで解除されません。 並べ替え操作用の追加の一時ディスク領域も必要になる場合があります。 詳細については、「 インデックス DDL 操作のディスク領域の要件」を参照してください。
この例では、クラスター化インデックスを作成するためのディスク領域の要件が決定されます。
クラスター化インデックスを作成する前に、次の条件が当てはまるとします。
既存のテーブル (ヒープ) には 100 万行が含まれています。 各行の長さは 200 バイトです。
非クラスター化インデックス A には、100 万行が含まれています。 各行の長さは 50 バイトです。
非クラスター化インデックス B には、100 万行が含まれています。 各行の長さは 80 バイトです。
インデックス作成メモリ オプションは 2 MB に設定されています。
塗りつぶし係数の値 80 は、既存のインデックスと新しいインデックスすべてに使用されます。 これは、ページが80パーセント埋まっていることを意味します。
注
クラスター化インデックスを作成した結果、行インジケーターを新しいクラスター化インデックス キーに置き換えるために、2 つの非クラスター化インデックスを再構築する必要があります。
オフライン インデックス操作のディスク領域の計算
次の手順では、インデックス操作中に使用する一時ディスク領域と、新しいインデックスを格納するための永続的なディスク領域の両方が計算されます。 表示される計算は近似値です。結果は切り上げられ、インデックスリーフレベルのサイズのみを考慮します。 チルダ (~) は、近似計算を示すために使用されます。
ソース構造のサイズを決定します。
ヒープ: 100 万 * 200 バイト ~ 200 MB
非クラスター化インデックス A: 100 万 * 50 バイト/80% ~ 63 MB
非クラスター化インデックス B: 100 万 * 80 バイト/80% ~ 100 MB
既存の構造体の合計サイズ: 363 MB
ターゲット インデックス構造のサイズを決定します。 新しいクラスター化キーの長さが、uniqueifier を含めて 24 バイトであるとします。 両方の非クラスター化インデックスの行インジケーター (8 バイト長) は、このクラスター化キーに置き換えられます。
クラスター化インデックス: 100 万 * 200 バイト/80% ~ 250 MB
非クラスター化インデックス A: 100 万 * (50 - 8 + 24) バイト / 80% ~ 83 MB
非クラスター化インデックス B: 100 万 * (80 - 8 + 24) バイト / 80% ~ 120 MB
新しい構造体の合計サイズ: 453 MB
インデックス操作の期間中にソース構造とターゲット構造の両方をサポートするために必要なディスク領域の合計は 816 MB (363 + 453) です。 ソース構造体に現在割り当てられている領域は、インデックス操作のコミット後に割り当てが解除されます。
並べ替えのための追加の一時ディスク領域を決定します。
tempdb での並べ替え (SORT_IN_TEMPDBが ON に設定されている場合) とターゲットの場所での並べ替え (SORT_IN_TEMPDB OFF に設定されている) には、領域の要件が表示されます。
SORT_IN_TEMPDBが ON に設定されている場合、 tempdb には最大インデックス (100 万 * 200 バイト ~ 200 MB) を保持するのに十分なディスク領域が必要です。 並べ替え操作では、塗りつぶし係数は考慮されません。
追加のディスク領域 (tempdb の場所) は、インデックス作成メモリを構成するサーバー構成オプションが 2 MB であることと等しい。
SORT_IN_TEMPDBが ON ~ 202 MB に設定されている一時ディスク領域の合計サイズ。
SORT_IN_TEMPDBが OFF (既定値) に設定されている場合、手順 2 で新しいインデックスに対して既に考慮されている 250 MB のディスク領域が並べ替えに使用されます。
[ インデックス作成メモリの構成] サーバー構成オプション の値 = 2 MB と等しい追加のディスク領域 (ターゲットの場所)。
SORT_IN_TEMPDBが OFF = 2 MB に設定されている一時ディスク領域の合計サイズ。
tempdb を使用すると、クラスター化インデックスと非クラスター化インデックスを作成するために合計 1018 MB (816 + 202) が必要になります。 tempdb を使用すると、インデックスの作成に使用される一時ディスク領域の量が増えますが、tempdb がユーザー データベースとは異なるディスク セット上にある場合、インデックスの作成に必要な時間が短縮される可能性があります。 tempdb の使用の詳細については、「インデックスのSORT_IN_TEMPDB オプション」を参照してください。
tempdb を使用しない場合、クラスター化インデックスと非クラスター化インデックスを作成するには、合計 818 MB (816 + 2) が必要になります。
オンライン クラスター化インデックス操作のディスク領域の計算
クラスター化インデックスをオンラインで作成、削除、または再構築する場合、一時的なマッピング インデックスを作成して維持するには、追加のディスク領域が必要です。 この一時マッピング インデックスには、テーブル内の行ごとに 1 つのレコードが含まれており、その内容は古いブックマーク列と新しいブックマーク列の和集合です。
オンライン クラスター化インデックス操作に必要なディスク領域を計算するには、オフライン インデックス操作に示されている手順に従って、次の手順の結果にそれらの結果を追加します。
一時マッピング インデックスの領域を決定します。
この例では、古いブックマークはヒープの行 ID (RID) (8 バイト) で、新しいブックマークはクラスタリング キー (
uniqueifierを含む 24 バイト) です。 古いブックマークと新しいブックマークの間に重複する列はありません。一時マッピング インデックス サイズ = 100 万 * (8 バイト + 24 バイト) / 80% ~ 40 MB。
このディスク領域は、SORT_IN_TEMPDBが OFF に設定されている場合はターゲットの場所の必要なディスク領域に、SORT_IN_TEMPDBが ON に設定されている場合は tempdb に追加する必要があります。
一時マッピング インデックスの詳細については、「 インデックス DDL 操作のディスク領域の要件」を参照してください。
ディスク領域の概要
次の表は、ディスク領域の計算結果をまとめたものです。
| インデックス操作 | 次の構造体の場所のディスク領域の要件 |
|---|---|
| SORT_IN_TEMPDB = ON でのオフライン インデックス操作 | 操作中の合計領域: 1018 MB: -既存のテーブルとインデックス: 363 MB* - tempdb: 202 MB* -新しいインデックス: 453 MB 操作後に必要な合計領域: 453 MB |
| SORT_IN_TEMPDB = OFF のオフライン インデックス操作 | 操作中の合計領域: 816 MB: -既存のテーブルとインデックス: 363 MB* -新しいインデックス: 453 MB 操作後に必要な合計領域: 453 MB |
| SORT_IN_TEMPDB = ON でのオンライン インデックス操作 | 操作中の合計領域: 1058 MB: -既存のテーブルとインデックス: 363 MB* - tempdb (マッピング インデックスを含む): 242 MB* -新しいインデックス: 453 MB 操作後に必要な合計領域: 453 MB |
| SORT_IN_TEMPDB = OFF を使用したオンライン インデックス操作 | 操作中の合計領域: 856 MB: -既存のテーブルとインデックス: 363 MB* -一時マッピング インデックス: 40 MB* -新しいインデックス: 453 MB 操作後に必要な合計領域: 453 MB |
*この領域は、インデックス操作がコミットされた後に割り当てが解除されます。
この例では、ユーザーの同時更新および削除操作によって作成されたバージョン レコードに対して tempdb に必要な追加の一時ディスク領域は考慮しません。