SQL Server 如何支援 NUMA

在 SQL Server 2005 中會導入下列主要變更,以利用非統一記憶體存取 (NUMA) 架構。

通用 CPU 的分組

SQL Server 會依據 Windows 公開的硬體 NUMA 界限,對排程器進行分組以對應至 CPU 的分組。例如,16-way 機箱中可能會有 4 個 NUMA 節點,而每個節點有 4 個 CPU。在節點上處理工作時,這樣可允許排程器群組有更大的記憶體位置。您可以利用 SQL Server 將硬體 NUMA 節點相關聯的 CPU 進一步細分成多個 CPU 節點。這稱為軟體 NUMA。通常,您會細分 CPU 來分割 CPU 節點的工作。如需有關軟體 NUMA 的詳細資訊,請參閱<了解非統一記憶體存取>。

當特定硬體 NUMA 節點上執行的執行緒配置記憶體時,SQL Server 的記憶體管理員會嘗試針對參考位置,從與 NUMA 節點相關聯的記憶體配置記憶體。同樣地,也會在硬體 NUMA 節點之間分散緩衝集區分頁。對於執行緒來說,從在本機記憶體上配置的緩衝區分頁存取記憶體,會比從外部記憶體存取更有效率。如需詳細資訊,請參閱<在 NUMA 之下放大和縮小緩衝集區>。

每個 NUMA 節點 (硬體 NUMA 或軟體 NUMA) 都有相關聯的 I/O 完成通訊埠,可用來處理網路 I/O。這可協助跨多個通訊埠散發網路 I/O 處理。對 SQL Server 產生用戶端連接時,會繫結到其中一個節點。會在該節點上處理來自這個用戶端的所有批次要求。

每次在 NUMA 環境中啟動 SQL Server 執行個體時,SQL 錯誤記錄會包含說明 NUMA 組態的參考性訊息。

SQL Server 如何將軟體 NUMA 節點對應到硬體 NUMA 節點

軟體 NUMA 對電腦上的所有 SQL Server 執行個體定義一次,因此,Database Engine 的多個執行個體全都查看相同的軟體 NUMA 節點。然後 Database Engine 的每一個執行個體會使用相似性遮罩選項來選取適當的 CPU。每一個執行個體將使用與那些 CPU 相關聯的軟體 NUMA 節點。

啟動時,Windows 會從硬體 NODE 0 配置作業系統的記憶體。因此,硬體 NODE 0 可供其他應用程式使用的本機記憶體比其他節點還要少。有大型系統檔案快取時,此問題更引人注意。當 SQL Server 在含有不止一個 NUMA 節點的電腦上啟動時,它會試著在 NODE 0 以外的 NUMA 節點上啟動,使它的整體結構可以配置在本機記憶體上。若要設定軟體 NUMA,請參閱<如何:設定 SQL Server 使用軟體 NUMA>。

連接如何指定給 NUMA 節點

TCP 和 VIA 兩者都可以使連接與一或多個特定 NUMA  節點相似化。若未相似化,或連接具名管道或共用記憶體時,則連接會以循環方式分散到 NUMA 節點。在 NUMA 節點內,連接是執行在該節點上最少負載的排程器上。由於指定新連接的循環本質,當某節點閒置時,可能另一個節點內的所有 CPU 都很忙碌。如果您有很少的 CPU (例如 2 個),而且您發現因為長時間執行批次 (例如大量載入) 而造成很大的排程不平衡,則您若關閉 NUMA,會有較好的效能。如需詳細資訊,請參閱<如何:將 TCP/IP 通訊埠對應到 NUMA 節點>。

SQL Server 版本限制

透過 Service Pack 3 的 SQL Server 2000 不包括 NUMA 的特殊支援;不過,Service Pack 4 有一些有限的 NUMA 最佳化。SQL Server 2005 有許多實質改進,我們非常鼓勵 NUMA 的使用者升級到 SQL Server 2005 以充分利用 NUMA 架構的優點。