為什麼需要檔案群組 + RAID?
企業級資料庫面臨:資料量爆炸、I/O 瓶頸、高可用性要求。將資料依存取模式分散至不同檔案群組,搭配適合的 RAID 等級,可同時達成效能、容錯、成本平衡。
常見 RAID 等級特性對照
| RAID | 機制 | 讀效能 | 寫效能 | 容錯 | 空間利用率 | 適用場景 |
| RAID 0 | 條帶化 | 最佳 | 最佳 | 無 | 100% | 唯讀資料、暫存資料、可重建資料(如複寫訂閱端) |
| RAID 1 | 鏡像 | 良好 | 較差(雙寫) | 單顆失效 | 50% | 系統資料庫、交易記錄檔、小型關鍵資料 |
| RAID 5 | 條帶+分散式奇偶檢查 | 良好 | 中等(需計算奇偶) | 單顆失效 | (N-1)/N | 一般用途資料檔案、成本敏感環境 |
| RAID 10 (1+0) | 鏡像再條帶 | 極佳 | 極佳 | 多顆失效(同鏡像組不超過 1) | 50% | 高寫入量、任務關鍵、TempDB、索引檔案 |
SQL Server 檔案群組規劃建議
| 檔案群組 | 建議 RAID | 放置內容 | 理由 |
| PRIMARY | RAID 1/10 | 系統資料表、小型靜態查閱表 | 系統表讀多寫少,需高可用 |
| USER_DATA | RAID 5/10 | 使用者資料表、叢集索引 | 視寫入比例決定,核心業務建議 RAID 10 |
| INDEXES | RAID 0/10 | 非叢集索引 | 可重建,RAID 0 最高效能;關鍵索引用 RAID 10 |
| TEMPDB | RAID 10 | 暫存表、排序、雜湊、版本存放區 | 高並發寫入,極度依賴 I/O,必須獨立磁碟陣列 |
| LOG | RAID 1/10 | 交易記錄檔 (.ldf) | 循序寫入為主,RAID 1 成本效益佳;極高寫入量用 RAID 10 |
| ARCHIVE/READ_ONLY | RAID 0/5 | 歷史封存、唯讀報表資料 | 可重建或唯讀,RAID 0 最大化容量與速度 |
實作關鍵步驟
- 規劃檔案群組對應磁碟陣列(LUN)。
- 建立資料庫時指定檔案群組:
CREATE DATABASE MyDB ON PRIMARY (NAME='MyDB_Pri', FILENAME='...'),
FILEGROUP USER_DATA (NAME='MyDB_Data', FILENAME='...'),
FILEGROUP INDEXES (NAME='MyDB_Idx', FILENAME='...')
LOG ON (NAME='MyDB_Log', FILENAME='...')
- 建立表時指定檔案群組:
CREATE TABLE Orders (...) ON USER_DATA
CREATE INDEX IX_Orders_Cust ON Orders(CustID) ON INDEXES
- 啟用瞬間檔案初始化(Instant File Initialization):授予服務帳號
SE_MANAGE_VOLUME_NAME 權限,加速資料檔案擴展。
- 監控:
sys.dm_io_virtual_file_stats 觀察各檔案 I/O 延遲、佇列長度,調整配置。
常見迷思破解
- 迷思:RAID 5 適合所有資料庫檔案。
事實:交易記錄循序寫入不適合 RAID 5;TempDB 高隨機寫入需 RAID 10。
- 迷思:檔案群組越多越好。
事實:管理複雜度隨之上升,建議 4-6 個核心群組即可。