SQLSERVER到底能识别多少个逻辑CPU?

前言

在前几天在论坛有人遇到SQLSERVER识别逻辑CPU的问题

帖子地址:

http://social.technet.microsoft.com/Forums/zh-CN/f8235ab2-4e46-4aea-81da-699d84b3b57b/sql-server-2005-

http://social.technet.microsoft.com/Forums/zh-CN/6fd788d3-014e-44bc-99f3-b962f4f041c7/sql-server-2005-x64-sp4-


环境

LZ当时的环境是这样的:

操作系统:Windows Server 2008 R2 企业版 SP1

高可用配置:群集

数据库:SQLSERVER 2005 企业版 64位  SP4

服务器硬件配置:

CPU:HP DL980 G7 4*10核心 2.00 G主频  有超线程功能

内存:256GB


SQLSERVER的情况

LZ当时描述说:他当时开启了超线程

操作系统能识别得到80个逻辑CPU(在任务管理器里看)

如果操作系统能识别80个逻辑CPU表明:

4颗10核2.00处理器 ,每核心双线程(4*10*2=80),也就是80个逻辑处理器(每个线程代表一个逻辑CPU)

或者

4颗10核2.00处理器 ,每核心一个线程,但是使用了超线程技术之后变为每核心双线程(4*10*2=80),

也就是80个逻辑处理器(每个线程代表一个逻辑CPU)

LZ说:在sql server 2005中数据库属性处理器一项中只能识别cpu0-cpu59,并且群集切换后,另一台接管资源节点只能识别到20颗逻辑处理器。

只能识别到60个逻辑CPU


论坛说法

而在帖子中两位仁兄都给出了各自的说法:

说法一:

当你在同一个集群上有多个SQLSERVER实例,最好把这些处理器划分开,供给多个实例使用。对于任何一个SQLSERVER实例

不能使用“自动设置所有处理器关联掩码”

rmiao的意思是说,不能勾选“自动设置所有处理器的处理器关联掩码”,以防止集群的某一个实例将所有逻辑CPU资源都用尽了

说法二:

按照MSDN的说法,SQLSERVER2005企业版是支持操作系统最大处理器数目的

对于这个情况,怡红公子给出了下面内容的链接:

64位的Windows7和Windows Server2008 R2为了能够在一台机器上,支持超过64个逻辑CPU ,引入了Process Group的概念

他会把一些逻辑CPU编成一个组,但是一个组内的逻辑CPU总数不能超过64个,否则将编入另外一个组

而且,分配逻辑CPU的工作也不一定是平均的。操作系统会在重启的时候,根据逻辑CPU之间的物理远近,自动进行编组。

例如,重启后可能变成20或者60核。

由于Process Group这个概念是在Windows2008才引入的。当开发SQLSERVER2008的时候, 并没有做相应的变化,

所以SQLSERVER2008是无法支持这个功能的。升级到SQLSERVER2008 R2就可以解决这个问题。

他最多可以同时检测到256个逻辑CPU。

如果不能升级到SQLSERVER2008 R2的话,可以人工干预Process Group的编组, 把第一个Process Group设置为64核,

以尽可能多的利用CPU,不过操作系统必须是64位Windows2008R2或64位Windows7或以上操作系统才能手工设置

关于如何设置Process Group编组,具体可以参考:http://support.microsoft.com/kb/2506384/zh-cn


翻译

我翻译了一下如何设置Process Group编组这篇文章

标题:如何在多处理器机器上手工设置处理器编组

概述

处理器编组的手动设置分配是在64位操作系统Windows Server 2008 R2开始的,并且应用在

超过64个逻辑CPU的NUMA(非统一内存架构)架构系统上。处理器编组设置允许

administrator系统管理员为处理器编组指定一个静态的NUMA节点,这样比让Windows在开机启动的时候动态

分配NUMA节点给处理器编组要好

注意:OEM厂商可以在OEM系统出厂之前为系统配置最优化的处理器编组

更多信息

在以前缺少手工设置处理器编组的时候,Windows以最小的编组的方式分配NUMA节点到编组里面。

Windows以自身的经验评估从之前启动时最小节点距离去分配每个处理器编组之间内部的节点距离。

administrator系统管理员可以使用以下两个方法的其中一个去重置自动编组分配:

第一个使用BCDEdit

第二个使用修改注册表

注意:Windows Server2008R2 使用下面的重置优先级:

手工修改注册表的优先级大于重置BCDEdit设置;然后,BCDEdit设置会覆盖操作系统的自动编组分配

也就是说优先级依次是:手工修改注册表>BCDEdit设置>操作系统的自动编组分配

使用 BCDEdit去配置编组分配

administrator系统管理员能够利用BCDEdit去覆盖掉默认编组分配,BCDEdit允许改变编组的大小和最大编组。

这个设置方法你可以在MSDN里的“修改操作系统启动参数去驱动测试多处理器编组支持”文章找到

文章地址:http://msdn.microsoft.com/en-us/library/ff542298(VS.85).aspx

相关命令:

 1 --设置最大编组大小
 2 bcdedit.exe /set groupsize maxsize
 3 --设置一个编组内只能有2个逻辑处理器
 4 bcdedit.exe /set groupsize 2
 5 --还原为默认的编组大小
 6  bcdedit.exe /deletevalue groupsize
 7 --开启最大化编组大小
 8 bcdedit.exe /set maxgroup on
 9 --关闭最大化编组大小
10 bcdedit.exe /set maxgroup off
11
12 bcdedit.exe /set groupaware on
13 bcdedit.exe /set groupaware off

使用手工修改注册表去配置处理器编组

第二个手工配置处理器编组的方法就是通过根据特定系统的首选NUMA特征去添加注册表参数

1 Key:  HKLM\System\CurrentControlSet\Control\NUMA
2
3 Value: “Group Assignment”
4
5 Type:  REG_BINARY

在注册表的HKLM\System\CurrentControlSet\Control位置添加新建NUMA项目

在NUMA项目里新建二进制值Group Assignment

而内容为:

Proximity Domain Count (N)

Proximity ID of domain 0

Group assignment for domain 0

Proximity ID of domain 1

Group assignment for domain 1   ...

Proximity ID of domain N-1

Group assignment for domain N-1

内容里的值是一系列的ULONG数据类型的值(4字节 unsigned 整型)

Boot System Processor (BSP) :一个系统中有多个逻辑CPU的时候,当操作系统启动的时候只会

利用到一个逻辑CPU 其他的逻辑CPU在操作系统启动的时候是不活动的,这个逻辑CPU称为Boot System Processor (BSP)

重要:确保分配亲近的域包含BSP到组0。Windows确保BSP有组掩码(组0,号码0)

场景

例如,考虑下面的场景, 一个机器有80个逻辑处理器平均分配到4个NUMA节点当中, 电脑的BIOS资源掩码表(SRAT)

定义了NUMA节点与ID亲近:0x11, 0x12, 0x13, 0x14. 用于系统启动的那个逻辑CPU(BSP)与域 0x11亲近

下面是两个描述了如何去手动分配节点的场景 例子1:

你希望分配节点0x11 和 0x12 到编组0, 然后 节点0x13 和 0x14 到编组 1.

准备下面的表:

注意:你必须分配亲近域 ID 0x11 到编组0 因为域 ID 0x11 包含了 BSP.

根据上面这个表去配置注册表,从最右面的列(Value as ULONG)连接所有的4字节ULONG类型值到一个单一的long类型二进制制。

运行下面的脚本 ,将他保存为bat文件,然后双击运行

1 reg.exe add HKLM\System\CurrentControlSet\Control\NUMA /v "Group Assignment" /t REG_BINARY /f /d "040000001100000000000000120000000000000013000000010000001400000001000000"

导入成功

例子2: 你希望配置节点0x11 和 0x12 到编组 0, 节点 0x13 到编组 1, 然后节点 0x14 到编组 2.

例子2跟例子1是差不多的,这里就不翻译了

重启电脑配置就会生效。如果配置不正确(数据内容长度错误,亲近IDs不对,或者定义了不合法的编组),手工编组分配就会被忽略,

启动机器时不会按照编组分配定义那样去分配编组

完成了手工编组分配之后,重启计算机,有两种方法验证目标机器的NUMA配置编组分配是否被正确应用

方法一:使用Perfmon(性能监视器)添加计数器,选择“处理器信息”计数器,查看传输的元祖(NUMA节点,看处理器在零基线里)

这里只会显示有多少节点展现出来,和在每个节点里有多少处理器

方法二::使用任务管理器,使用这个方法,你能看到节点与编组的映射。选择处理器选项卡, 右击每个处理器,

选择“设置掩码。。。”,然后查看哪些节点在哪个编组。这里会显示每个编组都有哪些节点


总结

按照上面那篇文章所说的,那么msdn上说的“SQLSERVER2005企业版是支持操作系统最大处理器数目的” 不是很正确

最后,个人感觉说法二比较靠谱一些,大家认为呢?

补充:

处理器编组相关文章:

http://blogs.msdn.com/b/psssql/archive/2009/06/16/sql-server-on-windows-7-windows-2008-r2-with-more-than-64-cpus.aspx

NUMA相关文章:

http://blogs.msdn.com/b/manisblog/archive/2007/09/17/scale-up-with-sql-server-2005-sql-server-2008-numa.aspx

http://blogs.msdn.com/b/psssql/archive/2008/01/24/how-it-works-sql-server-2005-numa-basics.aspx

---------------------------------------------------------------------

2013-9-16补充:

最后LZ的解决了问题,大家可以参考下面这篇文章

http://blogs.msdn.com/b/apgcdsd/archive/2011/09/05/windows-2008-r2-sql-server-2008-cpu.aspx

如有不对的地方,欢迎大家拍砖o(∩_∩)o

SQLSERVER到底能识别多少个逻辑CPU?相关推荐

  1. sqlserver对cpu主频要求_SQLSERVER到底能识别多少个逻辑CPU?

    SQLSERVER到底能识别多少个逻辑CPU? 前言 在前几天在论坛有人遇到SQLSERVER识别逻辑CPU的问题 帖子地址: http://social.technet.microsoft.com/ ...

  2. sqlserver对cpu主频要求_SQLServer数据库之SQLSERVER能识别多少个逻辑CPU

    本文主要向大家介绍了SQLServer数据库之SQLSERVER能识别多少个逻辑CPU,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助. 在论坛有人遇到SQLSERVER识别 ...

  3. 【AIX】LPar分区技术、逻辑CPU、虚拟CPU、物理CPU

    [AIX]LPar分区技术.逻辑CPU.虚拟CPU.物理CPU      IBM硬件管理控制台(Hardware Management Console)提供了标准的用户接口来配置和管理Power Sy ...

  4. CPU 主频,核数 参数解读 物理CPU,逻辑CPU,物理核 概念辨析

    Q1: CPU高主频好还是多核数好? 游戏需求 如果是主打游戏,由于游戏需要的是最简单粗暴的计算工作,这方面多核心有点无用武之地.因此,目前主流游戏都是双核心调用,四核或者更多核心的比较少. 也就是说 ...

  5. 【笔记11】个人扫盲:内存与CPU中的核、线程、物理CPU、逻辑CPU

    文章目录 CPU与内存 CPU 内存 什么是通道 常见问题 物理CPU和逻辑CPU 常见问题 LINUX查看 WINDOW查看 CPU与内存 CPU CPU(Central Processing Un ...

  6. 物理CPU,CPU核数,逻辑CPU

    CPU概念 物理CPU 在Info中由physical id识别 物理CPU指的是实际主板上插槽上的CPU个数.physical id 就是每个物理CPU的ID,不重复的 physical id 有几 ...

  7. 转载大神的 Linux查看物理CPU个数、核数、逻辑CPU个数

    Linux查看物理CPU个数.核数.逻辑CPU个数 CPU总核数 = 物理CPU个数 * 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数 查看CPU信 ...

  8. 【转】Linux查看物理CPU个数、核数、逻辑CPU个数

    # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| ...

  9. Linux下区分物理CPU、逻辑CPU和CPU核数

    Linux下区分物理CPU.逻辑CPU和CPU核数 ㈠ 概念 ① 物理CPU 实际Server中插槽上的CPU个数物理cpu数量,可以数不重复的 physical id 有几个 ② 逻辑CPU Lin ...

最新文章

  1. 【Python】百度首页GIF动画的爬虫
  2. Apache Kafka - Schema Registry
  3. 【华科考研机试题】二叉树遍历(递归版 详细注释)
  4. 沃尔玛痛失世界最大零售商 电商凶猛!
  5. php岗位专业技能,PHP简历专业技能怎么写
  6. 给软件工程师的学习参考
  7. ajax获取cpu的占用率,JavaScript获取当前cpu使用率的方法
  8. UWP 保存用户设置
  9. Asp.net中Mysql存储中文乱码解决方法
  10. 【重磅预告】揭秘阿里双11技术进步历程!
  11. 华三 h3c DHCP
  12. Adopt Open JDK官方文档(五) Docker镜像
  13. kettle 内存设置_Kettle大数据量转换报错ora-04030: 在尝试分配484字节时进程内存不足...
  14. 使用Matlab软件进行逐像元Hurst指数分析
  15. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛部分题解
  16. 谷歌pay服务端文档_米大师服务端说明
  17. 【Anaconda安装与使用】
  18. 我是如何成为一名程序员的?
  19. 分享:如何使DFC实现跨平台
  20. 一文玩转 WebDriver API

热门文章

  1. linux服务器svn安装配置
  2. nginx配置实战1----配置虚拟主机
  3. 剑指Offer(Java版):二叉搜索树的后序遍历序列
  4. LAMP组合之服务分离部署
  5. 几行小代码,将Testlink的xml用例导入至excel
  6. 万能Ghost全攻略(最详细完整的教程)
  7. 7-2 修理牧场 (25 分)
  8. 大数据分析方法管不管用
  9. datagrid 什么时候结束编辑_小规模纳税人免税政策什么时候结束?有答复了
  10. armax函数 matlab 源码_【源码】Kmeans聚类算法(超快速、简洁的设计方法)