適用於:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric 中的 SQL 資料庫
無論何時建立、重建或卸除索引,舊結構 (來源) 和新結構 (目標) 兩者在它們適當的檔案和檔案群組中都需要磁碟空間。 在索引建立交易提交之前,不會解除配置原有結構。 可能還需要額外的臨時磁碟空間來進行排序作業。 如需詳細資訊,請參閱 索引 DDL 作業的磁碟空間需求。
在此範例中,會決定建立叢集索引的磁碟空間需求。
假設在建立叢集索引之前,發生下列狀況:
- 現有的資料表 (堆積) 包含 1 百萬個資料列。 每一個資料列的長度為 200 位元組。
- 非叢集索引 A 包含 1 百萬個資料列。 每一個資料列的長度為 50 位元組。
- 非叢集索引 B 包含 1 百萬個資料列。 每一個資料列的長度為 80 位元組。
- 「index create memory」選項設定為 2 MB。
- 所有現有的和新的索引採用 80 的填滿因數值。 這表示有 80% 的分頁是滿的。
注意
建立叢集索引後,必須重建這兩個非叢集索引,以便用新的叢集索引鍵替換資料列識別符。
離線索引作業的磁碟空間計算
下列步驟中,會計算索引作業期間使用的暫存磁碟空間和儲存新索引的永久磁碟空間。 顯示的計算是近似值;結果是四捨五入,同時只考慮索引葉層級的大小。 波浪號 (~) 是用來表示近似的計算。
決定來源結構的大小。
- 堆疊:100 萬 * 200 位元組 ~ 200 MB
- 非叢集索引 A:1,000,000 * 50 位元組 / 80% ~ 63 MB
- 非叢集索引 B:1,000,000 * 80 位元組 / 80% ~ 100 MB
現有結構的總計大小:363 MB
決定目標索引結構的大小。 假設新的叢集索引鍵的長度是 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)。 在索引操作提交後,目前分配給源結構的空間將被釋放。
決定額外的暫存磁碟空間以供排序。
顯示
tempdb中的排序(將SORT_IN_TEMPDB設為ON)以及目標位置中的排序(將SORT_IN_TEMPDB設為OFF)的空間要求。當
SORT_IN_TEMPDB設定為ON時,tempdb必須有足夠的磁碟空間來保存最大的索引(一百萬*200位元組~200MB)。 排序作業中不會考慮填滿因素。附加磁碟空間(在
tempdb位置),其大小等於索引建立記憶體值的2 MB。暫存磁碟空間
SORT_IN_TEMPDB的總大小設定為ON~ 202 MB。當設定為
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 。