資料庫效能優化非單一階段任務,而是貫穿軟體生命週期的持續工程。本文依階段歸納關鍵實務,助團隊建立系統化調優文化。
一、分析階段:量化非功能需求
- 明確定義 即時性需求(如 OLTP 交易 < 200ms、OLAP 查詢 < 30s)、併發使用者數、資料成長預估。
- 識別系統屬性:OLTP(高併發、小筆交易)與 OLAP(大量掃描、複雜彙總)架構差異大,索引、分割、硬體規劃截然不同。
- 產出 效能基準測試計畫,納入驗收標準。
二、設計階段:奠定效能基石
1. 正規化與適度反正規化
- 核心業務表達 3NF 消除修改異常,減少資料冗餘。
- 高頻查詢路徑引入 策略性冗餘(摘要表、物化視圖、冗餘欄位)降低 JOIN 成本,但需建立同步機制(觸發器、ETL、CDC)確保一致性。
2. 索引設計先行
- 依 WHERE、JOIN、ORDER BY、GROUP BY 欄位建立叢集/非叢集索引。
- 叢集索引鍵選擇原則:窄、唯一、遞增、不常修改(如 Identity 或 UUID 排序版本),避免頁分裂與書籤查詢。
- 覆蓋索引滿足高頻查詢,減少鍵查閱。
3. 分割策略
- 大型事實表/歷史表採用 範圍分割(依日期/租戶),配合分割對齊索引,實現分割消除與平行掃描。
- 檔案群組對應不同儲存層(SSD 存熱資料、HDD 存冷資料),優化 IO 成本。
三、開發階段:寫出高效能 T-SQL
- 參數化查詢 重用執行計畫,防注入。
- 避免
SELECT *、標量函數在 WHERE 條件、隱含轉換(索引失效主因)。
- 善用
EXISTS 替代 IN、NOT EXISTS 替代 NOT IN。
- 大量資料修改分批次執行,避免長交易鎖死。
- 使用
SET NOCOUNT ON、TRY...CATCH 精簡網路封包與錯誤處理。
四、測試與上線前驗證
- 負載測試模擬生產併發,擷取 執行計畫、等待統計、DMV 指標(
sys.dm_exec_query_stats, sys.dm_os_wait_stats)。
- 建立 基準效能指標(P99 延遲、吞吐量、錯誤率),納入發布門檻。
- 啟用 查詢存放區 追蹤計畫變更。
五、維運階段:持續監控與微調
- 排程 索引重建/重組、統計資料更新(
AUTO_UPDATE_STATISTICS_ASYNC 避免同步阻塞)。
- 監控 阻塞、死結、編譯重組,建立告警閾值。
- 定期審視 成本最高的前 20 支查詢,針對性優化或加索引。
- 容量規劃:追蹤資料/記錄檔成長趨勢,預留擴充空間。
結語
效能優化是「設計佔七分、編碼佔兩分、維運佔一分」的系統工程。將關鍵實務內化為團隊規範,配合自動化工具持續觀測,才能在業務增長中保持資料庫穩健高效。