執行線上索引作業的指導方針
更新: 2006 年 4 月 14 日
當您執行線上索引作業時,下列指導方針將適用:
- 當基礎資料表包含大型物件 (LOB) 資料類型 (image、 ntext、text、varchar(max)、nvarchar(max)、varbinary(max) 與 xml) 時,必須離線建立、重建或卸除叢集索引。
- 資料表包含 LOB 資料類型,但這些資料行在索引定義中皆不作為索引鍵或無索引鍵 (內含) 資料行時,可以線上建立非唯一的非叢集索引。定義為 LOB 資料類型資料行的非叢集索引必須離線建立或重建。
- 在本機暫存資料表上不能在線建立、重建或卸除緹引。此限制不適用於全域暫存資料表上的索引。
附註: |
---|
只有 Microsoft SQL Server 2005 Enterprise Edition 才支援線上索引作業。 |
下表顯示可以線上執行的索引作業以及排除在線上作業以外的索引。也包含其他限制。
線上索引作業 | 排除索引 | 其他限制 |
---|---|---|
ALTER INDEX REBUILD |
已停用叢集索引或已停用索引檢視 XML 索引 本機暫存資料表上的索引 |
當資料表包含排除索引時,指定關鍵字 ALL 可能導致作業失敗。 重建已停用索引的其他限制也適用。如需詳細資訊,請參閱<停用索引的指導方針>。 |
CREATE INDEX |
XML 索引 在檢視上的初始唯一叢集索引 本機暫存資料表上的索引 |
|
CREATE INDEX WITH DROP_EXISTING |
已停用叢集索引或已停用索引檢視 本機暫存資料表上的索引 XML 索引 |
|
DROP INDEX |
停用的索引 XML 索引 非叢集索引 本機暫存資料表上的索引 |
不能在單一陳述式中指定多個索引。 |
ALTER TABLE ADD CONSTRAINT (PRIMARY KEY 或 UNIQUE) |
本機暫存資料表上的索引 叢集索引 |
一次僅允許一個子子句 (Subclause)。例如,您無法在同一個 ALTER TABLE 陳述式中加入和卸除 PRIMARY KEY 或 UNIQUE 條件約束。 |
ALTER TABLE DROP CONSTRAINT (PRIMARY KEY 或 UNIQUE) |
叢集索引 |
|
處理線上索引作業時,不能修改、截斷或卸除基礎資料表。
當您建立或卸除叢集時,指定的線上選項設定 (ON 或 OFF) 會套用到必須重建的任何非叢集索引。例如,若是使用 CREATE INDEX WITH DROP_EXISTING, ONLINE=ON 線上建立叢集索引,那麼也會線上重建所有相關聯的非叢集索引。
線上建立或重建 UNIQUE 索引時,此索引產生器與並行使用者交易可能嘗試要插入同一個索引鍵,因此而違反了唯一性。若在原始資料列從來源資料表移動到新索引之前,將使用者輸入的資料列插入至新索引(目標),線上索引作業將失敗。
雖然這種情形並不常見,但是由於使用者或應用程序活動的原因,線上索引作業與資料庫更新互動時,即會導致死結。在這些極少數情況下,SQL Server 2005 Database Engine 將選擇使用者或應用程序活動作為死結的犧牲者。
只有在建立多個新的非叢集索引或重新組織非叢集索引時,才能在同一個資料表或檢視上執行並行線上索引 DDL 作業。同時執行的所有其他線上索引作業都會失敗。例如,在同一個資料表中線上重建現有索引時,是無法線上建立新的索引。
磁碟空間考量因素
通常,磁碟空間需求對於線上與離線作業是一樣的。例外的情形是暫存對應索引需要額外的磁碟空間。此暫存索引用於建立、重建或卸除叢集索引的線上索引作業。線上卸除叢集索引與線上建立叢集索引需要一樣多的磁碟空間。如需詳細資訊,請參閱<索引 DDL 作業的磁碟空間需求>。
效能考量
雖然線上索引作業允許並行使用者更新活動,但是若更新活動負載繁重,此索引作業將需要更長時間。一般而言,無論並行更新活動的程度,線上索引作業都將低於同等的離線索引作業。
由於線上索引作業期間都會維護來源與目標結構,因此會增加插入、更新與刪除交易時所耗用的資源,甚至可能加倍。這在索引作業期間可能導致效能降低與資源過度耗用,尤其是 CPU 時間。線上索引作業會完整記錄下來。
儘管我們推薦線上作業,但您應該評估您的環境與特定要求。離線執行索引作業可能會是最佳方式。若要達到這種方式,在作業期間,使用者僅能有限地存取資料,但是將更快完成作業且使用較少的資源。
在執行 SQL Server 2005 Enterprise Edition 的多處理器電腦上,如同其他查詢一樣,索引陳述式可以使用更多處理器來執行與索引陳述式相關聯的掃描與排序作業。您可以使用 MAXDOP 索引選項來控制專門作為線上索引作業的處理器數目。以此方式,您就可以平衡索引作業所使用的資源以及使用者並行所使用的資源。如需詳細資訊,請參閱<設定平行索引作業>。
因為索引作業的最終階段會保留 S-lock 或 Sch-M 鎖定,所以在明確的使用者交易 (例如 BEGIN TRANSACTION...COMMIT 區塊) 內執行線上索引作業時要特別小心。這樣做導致交易完後才執行鎖定,而妨礙使用者進行並行作業。
交易記錄考量因素
大規模的索引作業,無論是離線或線上執行,都會產生大量資料負載,而很快就填滿了交易記錄。若要確定可以回復索引作業,在索引作業完成以前,不能截斷交易記錄;不過,在索引作業期間可以備份此記錄。因此,在索引作業期間,交易記錄必須有足夠的空間,才能儲存索引作業交易與任何並行使用者交易。如需詳細資訊,請參閱<索引作業的交易記錄磁碟空間>。
請參閱
概念
其他資源
ALTER INDEX (Transact-SQL)
CREATE INDEX (Transact-SQL)
說明及資訊
變更歷程記錄
版本 | 歷程記錄 |
---|---|
2006 年 4 月 14 日 |
|
2005 年 12 月 5 日 |
|