多核心伺服器上,Windows 排程器會將執行緒在各 CPU 核心間輪轉。SQL Server 高度依賴 **L1/L2/L3 快取**,執行緒遷移會導致快取失效 (Cache Miss)、重新載入資料,嚴重影響效能。
-- 執行個體層級 (需重啟服務)
EXEC sp_configure 'affinity mask', 0xF; -- 位元遮罩:0xF = CPU 0-3
RECONFIGURE;
-- 或啟用自動 (預設)
EXEC sp_configure 'affinity mask', 0;
RECONFIGURE;
affinity mask:使用者模式排程器綁定 CPU。affinity I/O mask:I/O 完成埠綁定 CPU (網路/磁碟中斷處理)。affinity64 mask。| 場景 | 建議 |
|---|---|
| 預設 (自動) | 大多數情況最佳,SQLOS 動態平衡負載與快取親和性 |
| 特定高負載執行個體佔用固定核心 | 設定 affinity mask 限制其核心範圍,避免搶佔其他執行個體核心 |
| 多執行個體共存 | 各實例設定不重疊 affinity mask (如 Instance A: CPU 0-15, Instance B: CPU 16-31) |
| NUMA 架構 | 建議啟用 trace flag 8048 (SQL 2012+) 讓 SQLOS 感知 NUMA 節點,而非手動 affinity |