共用方式為


索引磁碟空間範例

適用於:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric 中的 SQL 資料庫

無論何時建立、重建或卸除索引,舊結構 (來源) 和新結構 (目標) 兩者在它們適當的檔案和檔案群組中都需要磁碟空間。 在索引建立交易提交之前,不會解除配置原有結構。 可能還需要額外的臨時磁碟空間來進行排序作業。 如需詳細資訊,請參閱 索引 DDL 作業的磁碟空間需求

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

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

  • 現有的資料表 (堆積) 包含 1 百萬個資料列。 每一個資料列的長度為 200 位元組。
  • 非叢集索引 A 包含 1 百萬個資料列。 每一個資料列的長度為 50 位元組。
  • 非叢集索引 B 包含 1 百萬個資料列。 每一個資料列的長度為 80 位元組。
  • 「index create memory」選項設定為 2 MB。
  • 所有現有的和新的索引採用 80 的填滿因數值。 這表示有 80% 的分頁是滿的。

注意

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

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

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

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

    • 堆疊:100 萬 * 200 位元組 ~ 200 MB
    • 非叢集索引 A:1,000,000 * 50 位元組 / 80% ~ 63 MB
    • 非叢集索引 B:1,000,000 * 80 位元組 / 80% ~ 100 MB

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

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

    • 叢集索引:1,000,000 * 200 位元組 / 80% ~ 250 MB

    • 非叢集索引 A:1,000,000 * (50 - 8 + 24) 位元組 / 80% ~ 83 MB

    • 非叢集索引 B:1,000,000 * (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 必須有足夠的磁碟空間來保存最大的索引(一百萬*200位元組~200MB)。 排序作業中不會考慮填滿因素。

      附加磁碟空間(在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 位元組) 的資料列識別碼 (RID),而新的書籤是叢集索引鍵 (24 位元組,包括 唯一識別值)。 舊書籤和新書籤之間沒有重疊的欄。

    暫時映射索引大小 = 1 百萬 * (8 位元組 + 24 位元組) / 80% ~ 40 MB。

    如果 SORT_IN_TEMPDB 設為 OFF,則必須將此磁碟空間新增至目標位置中所需的磁碟空間;或者,如果 tempdb 設為 SORT_IN_TEMPDB,則新增至 ON

如需暫存對映索引的相關資訊,請參閱 索引 DDL 作業的磁碟空間需求

磁碟空間摘要

下表摘要出磁碟空間計算的結果。

索引作業 下列結構中,不同位置的磁碟空間需求
搭配SORT_IN_TEMPDB = ON的離線索引作業 操作期間的總空間:1,018 MB

- 現有資料表和索引:363 MB 1
- tempdb: 202 MB 1
- 新索引:453 MB

作業之後所需的總空間:453 MB
搭配SORT_IN_TEMPDB = OFF的離線索引作業 作業期間的總空間:816 MB

- 現有資料表和索引:363 MB 1
- 新索引:453 MB

作業之後所需的總空間:453 MB
線上索引作業 SORT_IN_TEMPDB = ON 操作期間的總空間:1,058 MB

- 現有資料表和索引:363 MB 1
- tempdb (包括映射索引):242 MB*
- 新索引:453 MB

作業之後所需的總空間:453 MB
線上索引作業 SORT_IN_TEMPDB = OFF 作業期間的總空間:856 MB

- 現有資料表和索引:363 MB 1
- 暫存對映索引: 40 MB 1
- 新索引:453 MB

作業之後所需的總空間:453 MB

1 在確定索引作業之後,會解除配置此空間。

此範例不會考慮並行使用者更新和刪除作業所建立的版本記錄所需的任何額外暫存磁碟空間 tempdb