热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

SQLSERVER中的NUMA架构-mysql教程

SQLSERVER中的NUMA架构之前看了园子里的宋大侠《浅谈SQLServer对于内存的管理》的文章,里面讲到NUMA架构,究竟NUMA架构是啥东西网上的资料说得让人一头雾水刚好上星期在MSDN上找到一篇关于NUMA架构的文章,文章是2011年写的,现在分享给大家o(_)o文章

SQLSERVER中的NUMA架构 之前看了园子里的宋大侠《浅谈SQL Server 对于内存的管理》的文章,里面讲到NUMA架构,究竟NUMA架构是啥东西 网上的资料说得让人一头雾水 刚好上星期在MSDN上找到一篇关于NUMA架构的文章,文章是2011年写的,现在分享给大家o(_)o 文章

SQLSERVER中的NUMA架构

之前看了园子里的宋大侠《浅谈SQL Server 对于内存的管理》的文章,里面讲到NUMA架构,究竟NUMA架构是啥东西

网上的资料说得让人一头雾水

刚好上星期在MSDN上找到一篇关于NUMA架构的文章,文章是2011年写的,现在分享给大家o(∩_∩)o


文章:SQL SERVER在NUMA架构下实现性能最佳化

就目前而言,CPU主频速度的迅速提升以及CPU数量的高速增长,并没有能够促使CPU在访问内存时的速度有所长进。

尽管L3 Cache的提出解决了部分问题,不过,CPU访问内存速度慢的现象并未有所改观,瓶颈依然存在。

为了更有效的解决CPU访问内存的速度问题,工业界引入了NUMA概念

首先介绍一下 NUMA 的架构,如下图:

每个 NUMA 节点(硬件 NUMA 或软件 NUMA)都有一个用于处理网络 I/O 的相关 I/O 完成端口,这有助于跨多个端口分布网络 I/O 处理

上述结构中展现出两个NUMA结点,每个NUMA结点有一些CPU, 一个内部总线,和自己的内存,甚至可以有自己的IO。每个CPU有离自己最近的内存可以直接访问。

所以,使用NUMA架构,系统的性能会更佳。值得注意的是,在NUMA结构下,可以比较方便的增加CPU的数目。

而在非NUMA架构下,增加CPU会导致系统总线负载很重,性能提升不明显。

虽然每个CPU也可以访问其他NUMA结点上的内存,但付出的代价则是导致速度更慢,这是要尽量避免的。

应用软件如果没有意识到这种结构,在NUMA机器上,有时候性能会更差,这是因为,他们经常会不自觉的去访问远端内存,从而导致整体性能下降。

通常而言,NUMA架构也有硬件和软件之分

一、硬件NUMA

硬件NUMA是在硬件层面上得以支持。如何才能知道本机是否有硬件NUMA呢? 最好的办法是问硬件供应商了。

但如果想知道机器中有多少个NUMA结点,那就可以在SQL Server Management Studio下用如下的查询,看能返回几个NUMA结点

1 SELECT DISTINCT memory_node_id FROM sys.dm_os_memory_clerks

或者,可以查看SQL Server的错误日志,如下面的错误日志表明,系统有两个NUMA结点

从 SQL Server 2000 SP3 以后,SQL Server开始支持NUMA架构,内存访问会尽量使用离CPU最近的内存,以提高性能。

二、软件NUMA

如果硬件本身不支持NUMA,还可以在软件层面上设置NUMA,如机器有4个CPU, 设成两个NUMA NODE

一个NODE占用CPU 0x11 (二进制编码),另外一个NODE占用CPU 0x1100 (二进制编码)。

那么,可以在注册表上做如下修改,以SQL Server 2008为例:

软件NUMA只是对CPU进行分组,并不会改变内存。因此对于内存来讲,还是只有一个结点,所以两个NUMA结点,访问的都是同一块内存。

而增加软件NUMA结点的好处在于,SQL Server会针对每一个软件NUMA结点,多一个LazyWriter的线程,

如果系统在LazyWriter上是性能瓶颈的话,引入Software NUMA则可以有效提升性能。

在服务器属性这个地方设置的只是软件NUMA,要机器真正支持硬件NUMA才是真正的NUMA

面对连接层面的NUMA

SQL Server 不仅仅在引擎上支持NUMA,在连接层面上也支持NUMA。

如果没有在连接层面上对NUMA进行设置的话,那么每一个连接进来,SQL Server会根据round-robin方式,选择NODE 进行处理。

在NODE内部,SQL Server会选择CPU负载最低的一个CPU进行处理。而这种方法的缺点是,有可能某一个NODE内的所有CPU都很忙,

但是另外一个NODE内的所有CPU都很空,从而导致资源不均衡。这种情况下,使用NUMA架构时性能反而会下降,还不如使用非NUMA架构,

系统能均衡分配CPU资源。

如下图所示,采用round-robin方式,可能NUMA NODE 0会非常繁忙,而NUMA NODE 1会非常空闲,系统资源不能充分利用。

重要的连接可能会被分配到NODE 0,导致不能得到及时处理,性能受到影响。

对此,可以在连接层面上进行设置。对于重要的操作,使用端口1450,该端口会绑定NUMA结点0、1,、2,

而对于不重要的操作(可能需要耗费大量资源,但不重要的),则使用端口1433,该端口会绑定NUMA结点3,

如此,不重要的操作不会对重要的操作在性能上有所影响

如何设置端口对NUMA结点的绑定?可以在侦听的端口后面加NUMA结点信息。如有八个NUMA结点,如果要使用NUMA结点0, 2, 5 那么根据MASK方式,

相应的数值是0x25,37

在SQL Server的网络设置中,相应的网络侦听端口后面,我们可以加MASK数值,如下,

这样,端口63409进来的连接,会跟NUMA结点0, 2, 5 进行绑定。

应该在配置管理器那里设置,我的是SQL2005

综上所述,NUMA概念的引入,将大大地提升硬件的可扩展性和处理能力。

SQL Server 从硬件NUMA、软件NUMA及连接上分别对NUMA这个体系架构做了优化支持,因此,NUMA架构下,SQL Server拥有更佳的性能和更好的扩展。


SQL Server 如何支持 NUMA

文章地址:http://msdn.microsoft.com/zh-cn/library/ms180954(v=SQL.105).aspx

这里我摘抄一些重要部分算了

公共 CPU 的分组
SQL Server 对计划程序进行分组,以根据 Windows 所显示的硬件 NUMA 边界将这些计划程序映射到 CPU 的分组。

例如,16 路逻辑单元有 4 个 NUMA 节点,每个节点有 4 个 CPU。这使得在节点上处理任务时,该组计划程序具有更多的本地内存。

使用 SQL Server,您可以进一步将与硬件 NUMA 节点关联的 CPU 细分为多个 CPU 节点。这称为软件 NUMA。

通常,您将细分 CPU 以跨 CPU 节点对工作进行分区。

名词解释:

16 路逻辑单元:说的是16个逻辑CPU,什么是逻辑CPU,比如酷睿I3cpu 双核四线程,那么四线程实际上就是四个逻辑CPU

四个逻辑CPU是指在同一个时间点,可以同时运算的计算单元,运行四个线程,处理四个任务在同一个时间点

计划程序:就是SQLOS里面的 scheduler,详细可以看我这篇文章 SQLSERVER独特的任务调度算法"SQLOS"

继续摘抄:--------------------------------------------------------------------------------------------------------------------

每个 NUMA 节点(硬件 NUMA 或软件 NUMA)都有一个用于处理网络 I/O 的相关 I/O 完成端口,这有助于跨多个端口分布网络 I/O 处理。

当某个客户端连接到 SQL Server 时,将绑定到其中一个节点。此客户端的所有批处理请求都将在该节点上处理

上面这句话是对上面哪两个图的很好解释

软件 NUMA 针对计算机中的所有 SQL Server 实例定义一次,因此,多个数据库引擎实例都能看到同样的软件 NUMA 节点。

然后,每个数据库引擎实例都使用 affinity mask 选项选择相应的 CPU。接着,每个实例都使用与这些 CPU 关联的任何软件 NUMA 节点

这句话说的就是服务器属性里面的CPU掩码

Windows 在启动后,从硬件 NODE 0 为操作系统分配内存。

因此,硬件 NODE 0 可用于其他应用程序的本地内存少于其他节点。

当需要缓存一个大型文件时,此问题尤为突出。当 SQL Server 在具有多个 NUMA 节点的计算机中启动时,它将尝试在 NODE 0 以外的 NUMA 节点上启动

如何将连接分配到 NUMA 节点
TCP 和 VIA 都可以将连接关联到一个或多个特定 NUMA 节点。当未进行关联,或使用 Named Pipes 或 Shared Memory 进行连接时,

连接将采用循环方式分布到 NUMA 节点。在 NUMA 节点内,连接按照该节点上负载最小的计划程序运行。由于新连接的分配具有循环性,

因此,当某个节点空闲时,另一个节点中的所有 CPU 可能都处于繁忙状态。如果您的 CPU 非常少(如 2 个),

并且看到由于具有长时间运行的批处理(如大容量加载)而导致庞大的计划不均衡,则在这种情况下,关闭 NUMA 可能会提高性能。

这句话同样也是上面两个分配连接的截图的补充解释

SQL Server 版本限制
从 SQL Server 2000 到 Service Pack 3,都不包括对 NUMA 的特别支持;

但是,Service Pack 4 有一些有限的 NUMA 优化。SQL Server 2005 有了大量重要的改进

,因此,我们极力鼓励 NUMA 用户升级到 SQL Server 2005 以充分利用 NUMA 体系结构


我的个人理解

SQLSERVER2008支持硬件NUMA,SQLSERVER2005只支持软件NUMA

假如一台电脑有两个物理NUMA节点(当然前提是电脑要支持NUMA),那么内存可以分成两份

SQL2008可以直接访问这两份内存

SQL2005 只能访问同一份内存


(引用一下宋大侠的一些图片)

NUMA节点的概念

逻辑CPU:代表多少个线程

core:代表多少个核心

numa node:numa节点

socket:socket通讯

例如:酷睿I3 双核四线程,那么逻辑CPU(logical cpu)有4个,core有2个

SQL Server OS在SMP硬件 直接访问同一个内存 方向 是自下向上

SQL Server OS在NUMA硬件 将一份物理内存分成两份 方向 是自下向上

写完了,睡觉去了~~

推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 优化版Windows 10 LTSC 21H2企业版:适用于低内存设备
    此版本为经过优化的Windows 10 LTSC 21H2企业版,特别适合低内存配置的计算机。它基于官方版本进行了精简和性能优化,确保在资源有限的情况下依然能够稳定运行。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • 在给定的数组中,除了一个数字外,其他所有数字都是相同的。任务是找到这个唯一的不同数字。例如,findUniq([1, 1, 1, 2, 1, 1]) 返回 2,findUniq([0, 0, 0.55, 0, 0]) 返回 0.55。 ... [详细]
  • 本文探讨了卷积神经网络(CNN)中感受野的概念及其与锚框(anchor box)的关系。感受野定义了特征图上每个像素点对应的输入图像区域大小,而锚框则是在每个像素中心生成的多个不同尺寸和宽高比的边界框。两者在目标检测任务中起到关键作用。 ... [详细]
author-avatar
白色的睡
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有