次の方法で共有


インデックス DDL 操作のディスク領域の要件

ディスク領域は、インデックスを作成、再構築、または削除するときの重要な考慮事項です。 ディスク領域が不足すると、パフォーマンスが低下したり、インデックス操作が失敗したりする可能性があります。 このトピックでは、インデックス データ定義言語 (DDL) 操作に必要なディスク領域の量を判断するのに役立つ一般的な情報を提供します。

追加のディスク領域を必要としないインデックス操作

次のインデックス操作では、追加のディスク領域は必要ありません。

  • ALTER INDEX REORGANIZE;ただし、ログ領域が必要です。

  • 非クラスター化インデックスを削除する際には、DROP INDEX を使用してください。

  • 非クラスター化インデックスが存在しない場合、MOVE TO 句を指定せずにクラスター化インデックスをオフラインで削除するときは、DROP INDEX を実行します。

  • テーブルを作成 (PRIMARY KEY 制約または UNIQUE 制約)

追加のディスク領域を必要とするインデックス操作

他のすべてのインデックス DDL 操作では、操作中に使用する追加の一時ディスク領域と、新しいインデックス構造または構造体を格納するための永続的なディスク領域が必要です。

新しいインデックス構造を作成する場合、古い (作成元の) 構造と新しい (作成先の) 構造の両方を格納するディスク領域が、それぞれ適切なファイルおよびファイル グループで必要になります。 古い構造の割り当ては、インデックス作成トランザクションがコミットされるまで解除されません。

次のインデックス DDL 操作では、新しいインデックス構造が作成され、追加のディスク領域が必要になります。

  • インデックスを作成

  • インデックスを作成し、既存を削除する

  • ALTER INDEX REBUILD (これはインデックスを再構築するためのSQLコマンドです)

  • テーブルを変更し、制約を追加 (主キーまたはユニーク)

  • ALTER TABLE DROP CONSTRAINT (PRIMARY KEY または UNIQUE) 制約がクラスター化インデックスに基づいている場合

  • DROP INDEX MOVE TO (クラスター化インデックスにのみ適用されます)。

ソート用の一時的ディスクスペース

ソース構造とターゲット構造に必要なディスク領域に加えて、並べ替えを必要としない実行プランがクエリ オプティマイザーによって検出されない限り、並べ替えに一時的なディスク領域が必要です。

並べ替えが必要な場合、並べ替えは新しいインデックスを1つずつ処理します。 たとえば、1 つのステートメント内でクラスター化インデックスと関連付けられている非クラスター化インデックスを再構築すると、インデックスは 1 つずつ並べ替えられます。 そのため、並べ替えに必要な追加の一時ディスク領域は、操作の最大インデックスと同じ大きさにする必要があります。 ほとんどの場合、これはクラスター化インデックスです。

SORT_IN_TEMPDB オプションが ON に設定されている場合、最大インデックスは tempdb に収まる必要があります。 このオプションを使用すると、インデックスの作成に使用される一時ディスク領域の量が増えますが、 tempdb がユーザー データベースとは異なる一連のディスク上にある場合、インデックスの作成に必要な時間が短縮される可能性があります。

SORT_IN_TEMPDBが OFF (既定値) に設定されている場合、パーティション インデックスを含む各インデックスは、コピー先のディスク領域で並べ替えられます。新しいインデックス構造のディスク領域のみが必要です。

ディスク領域の計算例については、「 インデックス ディスク領域の例」を参照してください。

オンライン インデックス操作用の一時ディスク領域

インデックス操作をオンラインで実行する場合は、追加の一時ディスク領域が必要です。

クラスター化インデックスがオンラインで作成、再構築、または削除された場合、古いブックマークを新しいブックマークにマップする一時的な非クラスター化インデックスが作成されます。 SORT_IN_TEMPDB オプションが ON に設定されている場合、この一時インデックスは tempdb に作成されます。 SORT_IN_TEMPDBが OFF に設定されている場合、ターゲット インデックスと同じファイル グループまたはパーティション構成が使用されます。 一時マッピング インデックスには、テーブル内の行ごとに 1 つのレコードが含まれます。その内容は、一意識別子とレコード識別子を含む古いブックマーク列と新しいブックマーク列の和集合であり、両方のブックマークで使用される列の 1 つのコピーのみが含まれます。 オンライン インデックス操作の詳細については、「インデックス 操作をオンラインで実行する」を参照してください。

DROP INDEX ステートメントには、SORT_IN_TEMPDB オプションを設定できません。 一時マッピング インデックスは、常にターゲット インデックスと同じファイル グループまたはパーティション構成で作成されます。

オンライン インデックス操作では、行のバージョン管理を使用して、他のトランザクションによる変更の影響からインデックス操作を分離します。 これにより、読み取られた行に対して共有ロックを要求する必要がなくなります。 オンライン インデックス操作中の同時ユーザーの更新操作と削除操作には 、tempdb のバージョン レコードの領域が必要です。 詳細については、「 インデックス操作をオンラインで実行する」 を参照してください。

インデックス ディスク領域の例

インデックス操作用のトランザクション ログ ディスク領域

テーブルのサイズを見積もる

クラスター化インデックスのサイズを見積もる

非クラスター化インデックスのサイズを見積もる

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

インデックス作成 (Transact-SQL)

ALTER INDEX (Transact-SQL)

DROP INDEX (Transact-SQL)

インデックスの FILL FACTOR の指定

インデックスの再構成と再構築