目录
简述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
---------------------------------------------------------
0
1
2
3
64
注意: 上述显示的结果中的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.aspxConfigure SQL Server to Use Soft-NUMA (SQL Server)
https://msdn.microsoft.com/en-us/library/ms345357%28v=sql.110%29.aspxSQL 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