適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric の SQL データベース
ディスク領域は、インデックスを作成、再構築、または削除するときの重要な検討事項です。 ディスク領域が不足すると、パフォーマンスが低下したり、インデックス操作が失敗したりする場合があります。 この記事では、インデックス データ定義言語 (DDL) 操作に必要なディスク領域の量を判断するのに役立つ一般的な情報を提供します。
追加のディスク領域を必要としないインデックス操作
次のインデックス操作では、追加のディスク領域は必要ありません。
ALTER INDEX REORGANIZE;ただし、ログ領域が必要です。DROP INDEX非クラスター化インデックスを削除する場合。DROP INDEXMOVE TO句を指定せずにクラスター化インデックスをオフラインで削除していて、非クラスター化インデックスが存在しない場合。CREATE TABLE(PRIMARY KEY制約またはUNIQUE制約)
追加のディスク領域を必要とするインデックス操作
他のすべてのインデックス DDL 操作では、操作中に使用する一時ディスク領域と、新しいインデックス構造を格納する永続的なディスク領域が追加で必要になります。
新しいインデックス構造を作成する場合、古い (作成元の) 構造と新しい (作成先の) 構造の両方を格納するディスク領域が、それぞれ適切なファイルおよびファイル グループで必要になります。 インデックス作成トランザクションがコミットされるまで、古い構造体は割り当て解除されません。
次のインデックス DDL 操作では、新しいインデックス構造が作成され、追加のディスク領域が必要になります。
CREATE INDEXCREATE INDEX WITH DROP_EXISTINGALTER INDEX REBUILD-
ALTER TABLE ADD CONSTRAINT(PRIMARY KEYまたはUNIQUE) -
ALTER TABLE DROP CONSTRAINT制約がクラスター化インデックスに基づいている場合(PRIMARY KEYまたはUNIQUE) -
DROP INDEX MOVE TO(クラスター化インデックスにのみ適用されます)。
並べ替え用の一時ディスク領域
ソース構造とターゲット構造に必要なディスク領域に加えて、並べ替えを必要としない実行プランがクエリ オプティマイザーによって検出されない限り、並べ替えに一時的なディスク領域が必要です。
並べ替えが必要な場合、一度に 1 つの新しいインデックスに対して並べ替えが実行されます。 たとえば、1 つのステートメント内でクラスター化インデックスと関連する非クラスター化インデックスを再構築すると、インデックスは順番に並べ替えられます。 したがって、並べ替えに必要な追加の一時ディスク領域のサイズは、並べ替えるインデックスの中で最も大きなインデックスのサイズと同じサイズになります。 通常は、クラスター化インデックスのサイズが最も大きくなります。
SORT_IN_TEMPDB オプションが ON に設定されている場合、最大インデックスはtempdbに収まる必要があります。 このオプションを使用すると、インデックスの作成に使用される一時ディスク領域の量が増えますが、ユーザー データベースとは異なる一連のディスク上にある場合 tempdb インデックスの作成に必要な時間が短縮される可能性があります。
SORT_IN_TEMPDBがOFF (既定) に設定されている場合、パーティション インデックスを含む各インデックスは、コピー先のディスク領域で並べ替えられます。新しいインデックス構造のディスク領域のみが必要です。
ディスク領域の計算の例については、「 インデックス ディスク領域の例」を参照してください。
オンライン インデックス操作用の一時ディスク領域
インデックス操作をオンラインで実行する場合、追加の一時ディスク領域が必要になります。
クラスター化インデックスをオンラインで作成、再構築、または削除すると、古いブックマークを新しいブックマークにマップする非クラスター化インデックスが一時的に作成されます。
SORT_IN_TEMPDB オプションが ON に設定されている場合、この一時インデックスは tempdb に作成されます。
SORT_IN_TEMPDBが OFF に設定されている場合は、ターゲット インデックスと同じファイル グループまたはパーティション構成が使用されます。 一時マッピング インデックスには、テーブルの行ごとに 1 つのレコードが格納されます。レコードの内容は、古いブックマーク列と新しいブックマーク列を組み合わせたもので、uniqueifier とレコード識別子が含まれます。両方のブックマークで使用されている列のコピーは 1 つしか含まれません。 オンライン インデックス操作の詳細については、「オンラインで インデックス操作を実行する」を参照してください。
Note
SORT_IN_TEMPDB ステートメントには、DROP INDEX オプションを設定できません。 一時マッピング インデックスは、常に新しいインデックスと同じファイル グループまたはパーティション構成に作成されます。
オンライン インデックス操作では、行のバージョン管理を使用して、他のトランザクションによる変更がインデックス操作に影響を与えないようにしています。 そのため、読み取った行の共有ロックを要求する必要がなくなります。 オンライン インデックス操作中の同時ユーザー更新操作と削除操作には、 tempdbのバージョン レコードの領域が必要です。 詳細については、 オンラインでのインデックス操作の実行 を参照してください。
関連タスク
- インデックスディスク領域の例
- インデックス操作用のトランザクション ログ ディスク領域
- テーブルのサイズを見積もる
- クラスター化インデックスのサイズを見積もる
- 非クラスター化インデックスのサイズを見積もる
- ヒープのサイズを見積もる