首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server Processor Affinity (處理器親和性) 設定詳解

     編輯:關於SqlServer

多核心伺服器上,Windows 排程器會將執行緒在各 CPU 核心間輪轉。SQL Server 高度依賴 **L1/L2/L3 快取**,執行緒遷移會導致快取失效 (Cache Miss)、重新載入資料,嚴重影響效能。

Processor Affinity 運作原理

  • 啟用後,SQL Server 排程器 (SOS Scheduler) 將 Worker 綁定至特定 CPU 核心。
  • 執行緒重新排程時傾向回到原核心,保留快取熱度。
  • 實際由 SQLOS 管理,非單純 OS 親和性遮罩。

設定方式

-- 執行個體層級 (需重啟服務)
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 (網路/磁碟中斷處理)。
  • 64 核心以上需使用 affinity64 mask。

適用場景與建議

注意事項

  • 手動設定 affinity 需深入理解負載分布,錯誤設定反而降低效能。
  • 變更需重啟 SQL Server 服務生效。
  • 現代 SQL Server (2012+) + NUMA 硬體,強烈建議保持自動並啟用 TF 8048,讓 SQLOS 智慧管理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
場景建議
預設 (自動)大多數情況最佳,SQLOS 動態平衡負載與快取親和性
特定高負載執行個體佔用固定核心設定 affinity mask 限制其核心範圍,避免搶佔其他執行個體核心
多執行個體共存各實例設定不重疊 affinity mask (如 Instance A: CPU 0-15, Instance B: CPU 16-31)
NUMA 架構建議啟用 trace flag 8048 (SQL 2012+) 讓 SQLOS 感知 NUMA 節點,而非手動 affinity