目錄
-
- 目錄
- 簡述SQLOS
- 正确了解SQL Server的NUMA架構
- 參考資料
簡述SQLOS
如在“跟我一起學Microsoft SQL Server 2012 Internals(1.4) ”中提到的,SQL Server Operating System(即SQLOS),作為SQL Server的底層元件,銜接着windows作業系統,管理着部分作業系統的資源,其主要實作了如下幾個内容:
- 同步化
- 記憶體broker
- SQL Server異常處理
- 死鎖檢測
- 擴充事件
- 異步I/O
- CLR hosting
其中同步化,指的是SQL Server的自旋鎖(Spinlock)、互斥(mutexes )以及系統資源上的特殊讀與寫
正确了解SQL Server的NUMA架構
NUMA即Non-Uniform Memory Access,指的是對記憶體的非對稱性通路。微軟從SQL Server 2000 sp4開始就已經支援NUMA架構了。而在SQL Server 2005以上的資料庫引擎中,實作了2種NUMA架構,即軟體NUMA(soft-NUMA)與硬體NUMA(hardware-NUMA),預設使用硬體NUMA。
相對于對稱多處理架構(SMP,即symmetric multiprocessing),NUMA架構發揮CPU性能,讓每個CPU都有一個獨立的通道去控制獨自的記憶體與I/O。
下圖截取自《Microsoft SQL Server 2012 Internals》,展示了含有4個CPU的NUMA節點,通過記憶體控制器分别控制自己通道内的記憶體與I/O等。
但NUMA架構也有缺點,缺點是2個node間的切換需消耗更多的資源。
我們可通過如下T-SQ代碼區分SQL Server啟用了何種NUMA。
--檢查是使用了軟NUMA或是硬NUMA
SELECT DISTINCT memory_node_id FROM sys.dm_os_memory_clerks
---------------------------------------------------------
注意: 上述顯示的結果中的64,其實是DAC node,是以這台伺服器使用了4個node,即使用了4核CPU的硬NUMA。關于DAC node可參考文章:The DMV sys.dm_os_memory_clerks May Show What Appears To Be Duplicate Entries
下圖是通過系統存儲過程sp_readerrorlog,檢視2核CPU安裝的SQL Server的啟動資訊:
我們可在圖中看到此SQL Server使用了2個node的硬NUMA架構。
若是使用了軟NUMA(soft-NUMA),則可通過系統存儲過程sp_readerrorlog看到下圖所示内容(圖檔取自MSDN)
若我們想使用軟NUMA,可需通過系統資料庫設定CPU的關聯。具體可參考文章:SQL Server and Soft NUMA
注意:SQL Server設定的軟NUMA的node數最大不可超過CPU的邏輯數。
參考資料
- 《Microsoft SQL Server 2012 Internals》 - chapter 2
-
SQL SERVER對NUMA的支援
https://technet.microsoft.com/en-us/library/ms178144%28v=sql.105%29.aspx
-
Configure SQL Server to Use Soft-NUMA (SQL Server)
https://msdn.microsoft.com/en-us/library/ms345357%28v=sql.110%29.aspx
-
SQL SERVER對NUMA的支援
https://blogs.msdn.microsoft.com/apgcdsd/2011/11/15/sql-servernuma/
-
How It Works: Soft NUMA, I/O Completion Thread, Lazy Writer Workers and Memory Nodes
https://blogs.msdn.microsoft.com/psssql/2010/04/02/how-it-works-soft-numa-io-completion-thread-lazy-writer-workers-and-memory-nodes/
update by HyperWang at 2016/03/28