共用方式為


索引磁碟空間範例

適用於:SQL ServerAzure SQL 資料庫Azure SQL 受控執行個體

無論何時建立、重建或卸除索引,舊結構 (來源) 和新結構 (目標) 兩者在它們適當的檔案和檔案群組中都需要磁碟空間。 舊結構在索引創建交易提交之前不會被釋放。 此時也可能會需要額外暫存磁碟空間,以供排序作業。 如需詳細資訊,請參閱 Disk Space Requirements for Index DDL Operations

在此範例中,會決定建立叢集索引的磁碟空間需求。

假設在建立叢集索引之前,發生下列狀況:

  • 現有的資料表 (堆積) 包含 1 百萬個資料列。 每一個資料列的長度為 200 位元組。

  • 非叢集索引 A 包含 1 百萬個資料列。 每一個資料列的長度為 50 位元組。

  • 非叢集索引 B 包含 1 百萬個資料列。 每一個資料列的長度為 80 位元組。

  • 「index create memory」選項設定為 2 MB。

  • 所有現有的和新的索引採用 80 的填滿因數值。 這表示有 80% 的分頁是滿的。

    注意

    建立叢集索引後,必須重建這兩個非叢集索引,以便用新的叢集索引鍵替換資料列識別符。

離線索引作業的磁碟空間計算

下列步驟中,會計算索引作業期間使用的暫存磁碟空間和儲存新索引的永久磁碟空間。 顯示的計算是近似值;結果是四捨五入,同時只考慮索引葉層級的大小。 波浪號 (~) 是用來表示近似的計算。

  1. 決定來源結構的大小。

    記憶體堆積:100 萬 x 200 位元組 ~ 200 MB

    非叢集索引 A:1 百萬 * 50 位元組 / 80% ~ 63 MB

    非叢集索引 B:1 百萬 * 80 位元組 / 80% ~ 100 MB

    現有結構的總計大小:363 MB

  2. 決定目標索引結構的大小。 假設新的叢集索引鍵的長度是 24 個位元組,包含唯一識別值。 在兩個非聚簇索引中,資料列指標(長度為 8 個位元組)將被此叢集索引鍵取代。

    叢集索引:1 百萬 * 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 必須有足夠的磁碟空間,才能保留最大的索引 (1 百萬 * 200 位元組 ~ 200 MB)。 在排序作業中不考慮填滿因數。

      tempdb 位置需要額外的磁碟空間大小等於 設定索引創建記憶體伺服器配置選項 的值,也就是 2 MB。

      當 SORT_IN_TEMPDB 設為 ON 時,暫存磁碟空間的總計大小 ~ 202 MB。

    2. 當 SORT_IN_TEMPDB 設為 OFF (預設) 時,步驟 2 中為新索引所考慮的 250 MB 磁碟空間是用來排序。

      額外的磁碟空間(在目標位置)等於伺服器設定選項中所設的 index create memory 值,即 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 位元組) 的資料列識別碼 (RID),而新的書籤是叢集索引鍵 (24 位元組,包括 唯一識別值)。 舊書籤和新書籤之間沒有重疊的欄。

    暫時映射索引大小 = 1 百萬 * (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 作業的磁碟空間需求

索引作業的交易記錄磁碟空間