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

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

SQLSERVER到底能识别多少个逻辑CPU?前言在前几天在论坛有人遇到SQLSERVER识别逻辑CPU的问题帖子地址:social.technet.microsoft.comForumszh-CNf8235ab2-4e46-4aea-81da-699d84b3b57bsql-server-2005-social.technet.microsoft.comF

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/F

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

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

推荐阅读
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
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社区 版权所有