SQL Server 效能優化是系統架構師與 DBA 的核心技能。本文匯總 12 項經實戰驗證的優化策略,涵蓋 I/O 佈局、tempdb 隔離、熱點預防、數據類型選擇、碎片管理、檔案組規劃、自動增長控制、系統/用戶數據分離、索引設計、統計資訊維護與一致性檢查。
數據檔(.mdf/.ndf)與日誌檔(.ldf)產生大量 I/O。條件允許時,將日誌檔置於獨立物理磁碟(或 RAID 陣列),分散 I/O 壓力,同時利於災難恢復(尾部日誌備份)。
tempdb 為所有用戶共享,臨時表、排序、版本存儲均在此進行。建議:
• 放置於最快磁碟/RAID 10/SSD;
• 預留足夠空間並啟用自動增長;
• 設定合理增長幅度(避免過小產生外部碎片)。
SQL Server 7.0 以前,堆表插入集中於物理尾頁易產生鎖爭用。新版本透過 PFS 頁分散分配緩解。設計時避免在單調遞增列(如身份識別欄)建立聚集索引作為主鍵,必要時採用雜湊分區或 GUID 分散寫入。
單頁容納行數越多,I/O 越少。優先選用 tinyint、smallint、varchar(n) 而非過度使用 bigint、char、nvarchar(max)。
自動增長導致物理儲存非連續。排程執行 DBCC INDEXDEFRAG 或重建索引,配合 sys.dm_db_index_physical_stats 監控碎片率。
• 主檔(PRIMARY filegroup)存放系統目錄、系統表;
• 次要檔存放用戶表、索引;
• 可再將主/次檔置於不同磁碟,進一步分散 I/O。
大型資料庫可建立多個檔案組,將熱點表、索引、歸檔表分別映射至不同物理磁碟,透過效能基準測試調整最優佈局。
小型庫適用,大型庫頻繁增長/收縮會產生大量碎片並阻塞工作負載。建議:
• 固定增量(如 512MB/1GB)而非百分比;
• 關閉自動收縮,改由維護計畫手動控制。
將 master、model、msdb、tempdb 與用戶資料庫置於不同磁碟/陣列,改善 I/O 並行度,簡化備份/還原策略。
覆蓋索引、篩選索引、欄位順序、避免重複/冗餘索引、定期評估 sys.dm_db_index_usage_stats 淘汰未用索引。詳細策略請參考專題文章。
成本優化器依賴統計資訊制定執行計畫。啟用 AUTO_UPDATE_STATISTICS,大表配合維護計畫以 FULLSCAN 手動更新。
排程執行 DBCC CHECKDB(含 PHYSICAL_ONLY 加速),及早發現頁損壞、鏈結錯誤,確保資料完整性。