前言
NTFS 叢集是磁碟 I/O 讀寫的基本單位 (分配單元)。SQL Server 資料頁固定 8KB,8 頁 = 1 區 = 64KB。本文探討將專用 SQL Server 磁碟分區格式化為 64KB 叢集的效能效益與風險權衡。
背景知識
- NTFS 預設叢集:>2GB 分區預設 4KB,支援 512B~64KB,格式化時指定,事後不可變更
- 叢集大小權衡:
| 叢集大小 | 空間利用率 | 碎片程度 | 效能 |
| 小 (4KB) | 高 | 多 | 較差 (MFT 大、I/O 次數多) |
| 大 (64KB) | 低 (內部碎片) | 少 | 佳 (I/O 單位大、連續讀寫效率高) |
為何 64KB 叢集適合 SQL Server
- 完美對齊:SQL Server 區 = 64KB = NTFS 叢集,一次 I/O 讀寫一個完整區,無跨叢集開銷
- 減少 MFT 條目:大檔案 (資料/記錄檔常達數 GB) 條目大幅減少,元資料操作更快
- RAID 條帶對齊:生產環境 RAID 條帶通常設 64KB,檔案系統與 RAID 層完美對齊,無「讀取修改寫入」懲罰
- 免碎片整理:SQL Server 檔案預先配置、連續增長,64KB 叢集下幾乎無外部碎片
實測效能效益
- 循序掃描 (Full Scan/備份/檢查點) 吞吐量提升 15-30%
- 檢查點/資料庫鏡像/AlwaysOn 同步傳輸延遲降低
- TempDB 重建/擴展速度加快
風險與緩解
| 風險 | 影響 | 緩解措施 |
| 單次損壞損失 64KB | 磁碟壞軌/控制器故障時,最小損失單位變大 | RAID 1/5/10 + 定期備份 + DBCC CHECKSUM;實際單頁 8KB 損壞機率同樣存在 |
| 小檔案空間浪費 | 大量小檔案 (如大量小資料庫) 內部碎片增加 | 專用 SQL Server 磁碟不存放小檔案;共用磁碟維持 4KB |
| 無法縮小分區 | 64KB 叢集分區無法縮小至小於叢集大小 | 規劃足夠空間,避免縮小需求 |
實施步驟
- 規劃專用磁碟/磁碟陣列給 SQL Server 資料、記錄、TempDB
- Windows 磁碟管理 / `format` 命令格式化:
format X: /FS:NTFS /A:64K /V:SQLData
- 驗證:`fsutil fsinfo ntfsinfo X:` → `Bytes Per Cluster : 65536`
- 建立資料庫檔案於此磁碟,設定合理初始大小與成長增量 (建議固定 MB,非百分比)
- 啟用瞬間檔案初始化 (授予服務帳戶 `Perform volume maintenance tasks`),加快檔案擴展
適用場景與不適用場景
| 適用 | 不適用 |
| 專用 SQL Server 實例磁碟 | 共用檔案伺服器、文件庫、使用者磁碟 |
| 大型資料倉庫、OLTP 核心庫 | 大量小資料庫 (如多租戶每租戶一庫) |
| RAID 陣列條帶 = 64KB | 虛擬化環境底層儲存區塊大小不固定/未知 |
總結
對於專用 SQL Server 磁碟,**64KB NTFS 叢集是效能與管理的最佳平衡點**。它與 SQL Server 8KB 頁、64KB 區、RAID 64KB 條帶三層完美對齊,消除跨層不對齊開銷。現代大容量磁碟下空間浪費可忽略,風險可透過 RAID + 備份控制。建議納入新建 SQL Server 伺服器標準部署清單。