了解非統一記憶體存取
MicrosoftSQL Server 是非統一記憶體存取 (NUMA) 感知,不需要特殊組態就可以在 NUMA 硬體上順利執行。隨著處理器時脈和數目的增加,要降低使用此額外處理能力所需要的記憶體延遲變得越來越困難。為了避免這個狀況,硬體供應商提供了大型的 L3 快取,但這只是有限的解決方案。NUMA 架構對這個問題提供了可擴充的解決方案。SQL Server 已設計為利用 NUMA 式的電腦,而且不需要進行任何應用程式變更。
NUMA 概念
硬體的趨勢已走向可提供多個系統匯流排,而每一個匯流排都可服務一小組處理器。每一組處理器都有自己的記憶體,可能的話,也會有自己的 I/O 通道。不過,每個 CPU 都可存取與使用相同方法設計之其他群組相關聯的記憶體。每一個群組就稱為 NUMA 節點。NUMA 節點內的 CPU 數目取決於硬體供應商。存取本機記憶體會比存取與其他 NUMA 節點相關聯的記憶體更快。這就是非統一記憶體存取架構的名稱由來。
在 NUMA 硬體上,有些記憶體區域實際上是位於其他區域的不同匯流排上。因為 NUMA 使用本機和外部記憶體,所以存取某些記憶體區域的時間有時會比存取其他區域更久。「本機記憶體」和「外部記憶體」通常是用來參考目前執行的執行緒。本機記憶體是與目前執行之執行緒的 CPU 位於相同節點上的記憶體。不屬於目前執行之執行緒節點的記憶體,就是外部記憶體。外部記憶體也稱為「遠端記憶體」。存取外部記憶體的成本對存取本機記憶體之成本的比例叫作 NUMA 比例。如果 NUMA 比率為 1,則為對稱性多重處理 (SMP)。比率越大,存取其他節點記憶體的成本就越高。非 NUMA 感知的 Windows 應用程式 (包括 SQL Server 2000 SP3 和更舊版本) 有時候在 NUMA 硬體上的執行效能很差。
NUMA 的主要優點是延展性。NUMA 架構是為了超越 SMP 架構的延展性限制而設計的。使用 SMP 時,所有記憶體存取都會公佈到相同共用記憶體匯流排。這適合只有少數幾個 CPU 的時候使用,當您有幾十個甚至幾百個 CPU 爭相存取共用記憶體匯流排時,就不適用。NUMA 突破這些瓶頸,它限制任何一個記憶體匯流排上的 CPU 數目,並利用高速互連的方式來連接不同的節點。
硬體 NUMA 與軟體 NUMA
NUMA 可透過特殊化硬體 (硬體 NUMA) 或設定 SQL Server 記憶體 (軟體 NUMA) 來搭配記憶體與 CPU。在啟動時,SQL Server 會根據基礎作業系統和硬體組態或軟體 NUMA 設定來做本身的設定。不論是硬體或軟體 NUMA,當 SQL Server 以 NUMA 組態啟動時,SQL Server 就會為每一個節點記錄多模式組態訊息以及 CPU 遮罩。
硬體 NUMA
具有硬體 NUMA 的電腦有不止一個系統匯流排,每一個服務一小組處理器。每一組處理器有它自己的記憶體,可能的話,也會有它自己的 I/O 通道,但每一個 CPU 可以用相同的方式來存取與其他群組相關聯的記憶體。每一個群組就稱為 NUMA 節點。NUMA 節點內的 CPU 數目取決於硬體供應商。硬體製造商會告訴您,您的電腦是否支援硬體 NUMA。
如果您有硬體 NUMA,它可設定為使用交錯記憶體,而非 NUMA。在此情況下,Windows 及 SQL Server 將不會將它視為 NUMA。請執行下列查詢,來尋找 SQL Server 可用的記憶體節點數:
SELECT DISTINCT memory_node_id
FROM sys.dm_os_memory_clerks
如果 SQL Server 只傳回單一記憶體節點 (節點 0),表示您沒有硬體 NUMA,或硬體設定為交錯 (非 NUMA)。如果您認為硬體 NUMA 設定不正確,請連絡硬體廠商來啟用 NUMA。當硬體 NUMA 有四個以內的 CPU,且至少有一個節點只有一個 CPU 時,SQL Server 會忽略 NUMA 組態。
軟體 NUMA
SQL Server 可讓您將 CPU 分組成為節點,稱為軟體 NUMA。通常當您有許多 CPU 但沒有硬體 NUMA 時,您通常會設定軟體 NUMA,但您也可以使用軟體 NUMA,將硬體 NUMA 節點細分為更小的群組。僅 SQL Server 排程器和 SQL Server 網路介面 (SNI) 為軟體 NUMA 感知。記憶體節點是根據硬體 NUMA 而建立,因此不受軟體 NUMA 的影響。因此,假設您有一部內含八個 CPU 的 SMP 電腦,且建立四個軟體 NUMA 節點,而每一個節點各有兩個 CPU,那麼就只有一個記憶體節點可服務所有四個 NUMA 節點。軟體 NUMA 不提供記憶體給 CPU 相似性。
軟體 NUMA 的好處包括在具有許多 CPU 但沒有硬體 NUMA 的電腦上減少 I/O 和延遲寫入器瓶頸。每個 NUMA 節點都會有單一 I/O 執行緒和單一延遲寫入器執行緒。視資料庫使用情形而定,這些單一執行緒可能是重大的效能瓶頸。設定四個軟體 NUMA 節點可提供四個 I/O 執行緒和四個延遲寫入器執行緒來增加效能。
您建立的軟體 NUMA 不得包括來自不同硬體 NUMA 節點的 CPU。例如,如果硬體有八個 CPU (0..7),而您有兩個硬體 NUMA 節點 (0-3 和 4-7),就可以結合 CPU(0,1) 和 CPU(2,3) 來建立軟體 NUMA。您不能使用 CPU (1, 5) 建立軟體 NUMA,但您可以利用 CPU 相似性,使 SQL Server 的執行個體與不同 NUMA 節點的 CPU 相似化。因此,在上述範例中,如果 SQL Server 使用 CPU 0-3,您將擁有一個 I/O 執行緒和一個延遲寫入器執行緒。如果在上述範例中,SQL Server 使用 CPU 1、2、5 和 6,您將存取兩個 NUMA 節點,而且有兩個 I/O 執行緒和兩個延遲寫入器執行緒。
[!附註]
有些硬體組態共用像 L3/L4 快取之類的通用資源。處理器可依這些共用資源分組來建立軟體 NUMA 節點。
如需詳細資訊,請參閱<如何:設定 SQL Server 使用軟體 NUMA>。