SQL Server AlwaysOn 可用性組 - 在 SSMS 中創建聯機索引
我正在執行一個 2 節點 SQL Server 2016 AlwaysOn 可用性組。我想在 SSMS 中為 AlwaysOn 可用性組中的一個可用性數據庫線上創建一個非聚集索引。對於這個操作,索引創建線上非常重要;換句話說,表不應該被鎖定,並且在此期間讀取和寫入都應該繼續而不會中斷或出錯。此外,集群不應進入複製停止的不健康狀態。
這是我這樣做的計劃:
- 進入主節點上的 SQL Server Management Studio (SSMS),進入數據庫、表,然後進入對象資源管理器中的索引部分,然後右鍵點擊索引並選擇新索引 - 非集群
- 將適當的欄位添加到索引鍵列螢幕
- 轉到選項 - 並將**“允許線上 DML 處理”**設置為“真”
- 點擊確定
上述方法是最好的方法嗎?這真的會線上創建索引嗎?在創建索引時,集群是否會保持健康和複製狀態,索引是否會自動在輔助節點上創建,傳入的讀取和寫入是否會繼續發生而不會出現錯誤?
非常感謝您對此的任何幫助!
上述方法是最好的方法嗎?
本質上,這是解決此問題的唯一方法 - 索引只能由一個命令創建。您可以手動執行 T-SQL
CREATE INDEX
,但無論如何都會在伺服器上執行相同的命令(除非您選擇任何不同的選項,例如線上)。與任何生產部署一樣,理想情況下,您應該在較低的環境中對此進行測試,以了解需要多長時間以及是否會導致應用程序執行緩慢 - 根據提供的資訊我們無法告訴您.
這真的會線上創建索引嗎?
可以,前提是您使用的是企業版。否則將不會線上創建索引。同樣,這是您應該已經在較低環境或生產副本中測試過的東西。
在創建索引時,集群是否會保持健康和複製狀態
一般而言,索引創建不應影響集群健康,但我們也不知道您的伺服器規格、索引有多大,或許多其他可能使其成為風險更高的操作的細節。如果您擔心的話,我的建議是監控索引的創建。
索引會自動在輔助節點上創建嗎
請參閱上面的企業版評論。
傳入的讀取和寫入是否會繼續發生而不會出現錯誤?
如果正在創建索引,
ONLINE
則在此過程中不會鎖定表,但在創建的第一/最後階段仍然需要非常簡短的模式鎖定。但是,創建索引確實會消耗資源,因此您可能會看到使用目標表的查詢速度很慢。這就是為什麼您應該在發佈到生產環境之前對其進行測試。還有其他索引選項,例如
MAXDOP
可用於限制索引創建過程使用多少資源。