索引磁盘空间示例

每当创建、重新生成或删除索引时,相应的文件和文件组中都需要旧(源)和新的(目标)结构的磁盘空间。 旧的结构只有在提交索引创建事务后才会释放。 可能还需要其他临时磁盘空间用于排序作。 有关详细信息,请参阅 索引 DDL 操作的磁盘空间要求

在此示例中,确定创建聚集索引的磁盘空间要求。

假设在创建聚集索引之前满足以下条件:

  • 现有表(堆)包含 100 万行。 每行长度为 200 字节。

  • 非聚集索引 A 包含 100 万行。 每行长度为 50 字节。

  • 非聚集索引 B 包含 100 万行。 每行长度为 80 字节。

  • 索引创建内存选项设置为 2 MB。

  • 填充因子值 80 用于所有现有索引和新索引。 这意味着页面已满 80%。

    注释

    创建聚集索引后,必须重新生成两个非聚集索引,才能将行指示器替换为新的聚集索引键。

离线索引操作的磁盘空间计算

在以下步骤中,计算在索引作期间使用的临时磁盘空间和存储新索引的永久性磁盘空间。 显示的计算是近似的;结果向上舍入,只考虑索引叶级别的大小。 波形符 (~) 用于指示近似计算。

  1. 确定源结构的大小。

    堆:100 万 * 200 字节 ~ 200 MB

    非聚集索引 A:100 万 * 50 字节/80% ~ 63 MB

    非聚集索引 B:100 万 * 80 字节/80% ~ 100 MB

    现有结构的总大小:363 MB

  2. 确定目标索引结构的大小。 假设新的聚集密钥长度为 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)。 提交索引操作后,当前分配给源结构的空间将解除分配。

  3. 确定用于排序的其他临时磁盘空间。

    tempdb 中(SORT_IN_TEMPDB 设置为 ON)进行排序和在目标位置(SORT_IN_TEMPDB 设置为 OFF)进行排序时,会显示空间要求。

    1. 当SORT_IN_TEMPDB设置为 ON 时, tempdb 必须有足够的磁盘空间来容纳最大索引(100 万 * 200 字节 ~ 200 MB)。 排序作中不考虑填充因子。

      其他磁盘空间(在 tempdb 位置)等于 “配置索引”创建内存服务器配置选项 值 = 2 MB。

      临时磁盘空间的总大小,当设置 SORT_IN_TEMPDB 为 ON 时约为 202 MB。

    2. 当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)来创建聚集索引和非聚集索引。

联机聚集索引操作的磁盘空间计算

联机创建、删除或重新生成聚集索引时,需要额外的磁盘空间来生成和维护临时映射索引。 此临时映射索引包含表中每一行的一条记录,其内容是旧书签列和新书签列的并集。

要计算联机聚集索引操作所需的磁盘空间,请按照脱机索引操作中所示的步骤进行,并将结果与下列步骤的结果相加。

  • 确定用于临时映射索引的空间。

    在此示例中,旧书签是堆(8 字节)的行 ID(RID),新书签是聚类键(包括 a 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 中由并发用户更新和删除操作创建的版本记录所需的任何额外临时磁盘空间。

用于索引DDL操作的磁盘空间要求

索引操作的事务日志磁盘空间