當您執行線上索引作業時,下列指導方針將適用:
當基礎表包含下列大型物件 (LOB) 資料類型時,必須建立、重建或卸載叢集索引:
image、 ntext 和text。無法即時建立、重建或卸除本機臨時表上的索引。 這項限制不適用於全域臨時表上的索引。
備註
MicrosoftSQL Server 的每個版本都無法使用在線索引作業。 如需 SQL Server 版本所支援的功能清單,請參閱 SQL Server 2014 版本支援的功能。
下表顯示可在在線執行的索引作業,以及從這些在線作業中排除的索引。 也包含其他限制。
| 線上索引作業 | 排除索引 | 其他限制 |
|---|---|---|
| ALTER 索引重建 | 已停用叢集索引或已停用索引檢視 XML 索引 資料行存放區索引 本機暫存資料表上的索引 |
指定關鍵字 ALL 可能會導致作業在數據表包含排除的索引時失敗。 重建已停用索引的其他限制也適用。 如需詳細資訊,請參閱 停用索引和條件約束。 |
| 建立索引 | XML 索引 在檢視上的初始唯一叢集索引 本機暫存資料表上的索引 |
|
| 建立索引並刪除已存在的索引 | 已停用叢集索引或已停用索引檢視 本機暫存資料表上的索引 XML 索引 |
|
| DROP INDEX(刪除索引) | 停用的索引 XML 索引 非叢集索引 本機暫存資料表上的索引 |
無法在單一語句內指定多個索引。 |
| 更改資料表以添加約束條件(主鍵或唯一鍵) | 本機暫存資料表上的索引 叢集索引 |
一次僅允許一個子句。 例如,您無法在相同的 ALTER TABLE 語句中新增和卸除 PRIMARY KEY 或 UNIQUE 條件約束。 |
在在線索引作業進行時,無法修改、截斷或卸除基礎表。
當您建立或卸除叢集索引時所指定的在線選項設定 (ON 或 OFF)會套用至必須重建的任何非叢集索引。 例如,如果使用 CREATE INDEX WITH DROP_EXISTING、ONLINE=ON 建立叢集索引,則所有相關聯的非叢集索引也會重新建立在線。
當您在線建立或重建 UNIQUE 索引時,索引產生器與並行使用者交易可能會嘗試插入相同的索引鍵,因此違反唯一性。 如果使用者輸入的數據列在源數據表的原始數據列移至新索引(目標)之前已插入新的索引,則在線索引作業將會失敗。
雖然這種情形並不常見,但是由於使用者或應用程序活動的原因,線上索引作業與資料庫更新互動時,即會導致死結。 在這些罕見的情況下,SQL Server 資料庫引擎會將使用者或應用程式活動選取為死結受害者。
只有在建立多個新的非叢集索引,或重新組織非叢集索引時,才可以在相同的數據表或檢視上執行並行在線索引 DDL 作業。 同時執行的所有其他線上索引作業都會失敗。 例如,當您在同一資料表上在線重建現有索引時,無法在線創建新的索引。
當索引包含大型物件類型的數據行,而且在此在線作業之前有更新作業,則無法執行在線作業。 若要解決此問題,請將在線作業放在交易外部,或將它放在交易中的任何更新之前。
磁碟空間考慮
一般而言,在線和離線索引作業的磁碟空間需求相同。 例外是暫存對應索引所需的額外磁碟空間。 此暫存索引用於建立、重建或卸除叢集索引的線上索引作業。 在線卸除叢集索引需要與在線建立叢集索引一樣多的空間。 如需詳細資訊,請參閱 Disk Space Requirements for Index DDL Operations。
效能考量
雖然在線索引作業允許並行使用者更新活動,但如果更新活動非常繁重,索引作業會花費更長的時間。 一般而言,不論並行更新活動層級為何,在線索引作業的速度會比對等的離線索引作業慢。
因為來源和目標結構都會在在線索引作業期間維護,因此插入、更新和刪除交易的資源使用量會增加,可能高達兩倍。 這在索引作業期間可能導致效能降低與資源過度耗用,尤其是 CPU 時間。 線上索引作業會完整記錄下來。
儘管我們推薦線上作業,但您應該評估您的環境與特定要求。 最好離線執行索引作業。 這樣做時,使用者已限制在作業期間存取數據,但作業會更快完成,且使用較少的資源。
在執行 SQL Server 2014 的多處理器計算機上,索引語句可能會使用更多處理器來執行與索引語句相關聯的掃描和排序作業,就像其他查詢一樣。 您可以使用 MAXDOP 索引選項來控制在線索引作業專用的處理器數目。 如此一來,您就可以平衡索引作業與並行使用者所使用的資源。 如需詳細資訊,請參閱 設定平行索引作業。 如需支援平行索引作業之 SQL Server 版本的詳細資訊,請參閱 SQL Server 2014 版本支援的功能。
因為 S 鎖定或 Sch-M 鎖定會保留在索引作業的最後階段,因此當您在明確的使用者交易內執行在線索引作業時,請小心,例如 BEGIN TRANSACTION...COMMIT 區塊。 這樣做導致交易完後才執行鎖定,而妨礙使用者進行並行作業。
當允許使用MAX DOP > 1和ALLOW_PAGE_LOCKS = OFF選項執行時,線上索引重建可能會增加片段。 如需詳細資訊,請參閱 運作方式:線上索引重建 - 可能會導致片段增加。
交易日志考量
大規模的索引作業,無論是離線或線上執行,都會產生大量資料負載,而很快就填滿了交易記錄。 若要確定索引作業可以復原,在索引作業完成之前,無法截斷事務歷史記錄:不過,您可以在索引作業期間備份記錄檔。 因此,在索引作業期間,交易記錄必須有足夠的空間,才能儲存索引作業交易與任何並行使用者交易。 如需詳細資訊,請參閱 索引作業的事務歷史記錄磁碟空間。