博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
六、CPU优化(3)处理器组
阅读量:6360 次
发布时间:2019-06-23

本文共 4103 字,大约阅读时间需要 13 分钟。

一、SQL Server 启动参数

  SQL Server 有3个默认的启动参数,分别标识3个启动文件的位置。

(1)“-d”参数。标识master.mdf文件的位置。一般为C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\master.mdf 。

(2)“-l”参数。标识master数据库的LDF文件的位置。一般为C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\mastlog.ldf 。

(3)“-e”参数。标识启动日志的文件名和存储位置。一般为C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\ERRORLOG 。

 

  针对不同版本的数据库产品,有2种不同的方法查看启动参数。

1. SQL Server 2012以前的版本

  打开SQL Server配置管理器,编辑某个实例的属性。在“高级”选项卡,在“启动参数”编辑框进行查看或编辑。

 

2. SQL Server 2012

  SQL Server 2012 新增了一个独立的“启动参数”选项卡,专门用于查看和修改启动参数。

 

 

二、启动文件示例

  SQL Server 每次启动时,都先将原来的ERRORLOG.n(n=1,2,3等)改名为ERRORLOG.(n+1),然后将ERRORLOG 文件改名为ERRORLOG.1,最后生成一个新的ERRORLOG 文件。

  先看一下ERRORLOG 文件的前面一部分内容。

2013-08-05 21:05:08.70 Server      Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 

 Apr  2 2010 15:48:46 
 Copyright (c) Microsoft Corporation
 Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

2013-08-05 21:05:08.74 Server      (c) Microsoft Corporation.

2013-08-05 21:05:08.74 Server      All rights reserved.
2013-08-05 21:05:08.74 Server      Server process ID is 2560.
2013-08-05 21:05:08.74 Server      System Manufacturer: 'Dell Inc.', System Model: 'PowerEdge R510'.
2013-08-05 21:05:08.74 Server      Authentication mode is MIXED.
2013-08-05 21:05:08.75 Server      Logging SQL Server messages in file 'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Log\ERRORLOG'.
2013-08-05 21:05:08.76 Server      This instance of SQL Server last reported using a process ID of 2572 at 8/5/2013 9:02:22 PM (local) 8/5/2013 1:02:22 PM (UTC). This is an informational message only; no user action is required.
2013-08-05 21:05:08.76 Server      Registry startup parameters: 
  -d D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\master.mdf
  -e D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Log\ERRORLOG
  -l D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
2013-08-05 21:05:08.82 Server      SQL Server is starting at normal priority base (=7). This is an informational message only. No user action is required.
2013-08-05 21:05:08.83 Server      Detected 24 CPUs. This is an informational message; no user action is required.

 

  请注意最后一行记录,显示目前SQL Server检测到了总共24个逻辑CPU。

 

三、处理器组

1. 逻辑CPU 

  在购买SQL Server 2008 正版时,标准版和企业版都有一种Per Processor 授权方式,这里的Processor 只是针对物理CPU,与核(core)的数量没有关系。

  从SQL Server 2012开始,不再计算物理CPU的数量,改为按core的数量购买license。但是core的数量并不等同于逻辑CPU 的数量,因为在前一篇文章中还提到超线程。如果启用了超线程,那么逻辑CPU 的数量就是变成了2倍。

  通过以下方式查看处理器的数量:

(1)Windows的系统信息

  在命令提示符下面运行: systeminfo

 

(2)任务管理器

  在任务管理器可以看到有多少个框,代表多少个逻辑CPU。

 

(3)SSMS

  在SSMS中可以查看当前使用了多少个逻辑CPU。

 

(4)DMV

  一个处理器内核可能包含一个或多个逻辑处理器。 以下 Transact-SQL 查询可用于获取系统的 CPU 信息。

SELECT (cpu_count / hyperthread_ratio) AS PhysicalCPUs, 
cpu_count AS logicalCPUs 
FROM sys.dm_os_sys_info 

 

2. 处理器组

  以本人2012年在深圳处理某客户的真实案例来说,有4个物理CPU,每个CPU 有10核,并且启用了超线程,因此逻辑CPU 的数量为 4*10*2=80 。但是,每次SQL Server 启动后在SSMS 查看逻辑CPU 的数量,发现这个数字不确定,例如,有时候是40个逻辑CPU,有时候竟然是20。这是为什么呢?那么需要我们了解一下Windows 是如何识别大数量的逻辑CPU。

  在Windows ver6.0(Windows Vista、Windows Server 2008)操作系统中,不支持超过64个逻辑CPU。之后,随着物理CPU 、核的数量也增加,导致出现了超过64个逻辑CPU 的情形。Windows ver6.1(Windows 7、Windows Server 2008 R2)操作系统为了解除这个限制,引入了处理器组(Processor Group)的概念。这个功能仅适用于64位操作系统,在32位操作系统里无效。

  Windows ver6.1在启动时,会根据逻辑CPU之间的物理远近,自动编组。每一个组内的逻辑CPU不能超过64个,超过的部分再编入另一个组。目前的CPU是纳米精度的集成芯片,操作系统在判断逻辑CPU之间的物理远近时难免会发生“误判”。这样导致每次启动Windows时,都可能会得到不一样的分组情况,可能是60+20分配,也可能是40+40分配。

  SQL Server 2008在启动时,Windows以轮询的方式给它分配处理器组,然后SQL Server引擎就一直在这个处理器组里运行,直到重启SQL Server才重新分配处理器组。处理器组的不确定性,使SQL Server能够检测到的逻辑CPU数量也存在不确定性。

  在本例中,建议客户禁用了超线程之后,逻辑CPU的总数量降到40个,都编进一个处理器组了,因此就不存在问题了。

 

 

四. 修复 

1. Windows修复

  Windows ver6.1 目前不能将超过64个逻辑CPU编进一个处理器组。官方只是提供了一个补丁,避免60+20这种极端的分配情况(在此极端情况下,可能会将只有20个逻辑CPU的处理器组分派给SQL Server)。《Performance issues when more than 64 logical processors are used in Windows Server 2008 R2》 

 

2. SQL Server 修复

  在Windows ver6.1之后发布的 SQL Server 2008 R2 解决了这个问题,但SQL Server 2008 R2 最多只能检测到256个逻辑CPU。

 

3. NUMA

  对于NUMA架构,可以适当地手动调整。《How to manually configure K-Group assignment on multiprocessor machines》 

 

 

本文结语:

  SQL Server 2008 for Windows Server 2008 在遇到超过64个逻辑CPU时需要注意这个问题。

 

转载地址:http://csima.baihongyu.com/

你可能感兴趣的文章
JavaScript之对象
查看>>
1 使用 CXF 和 Spring 创建 Web 服务
查看>>
oracle xml类型字段的索引
查看>>
简单演示 Oracle 数据库并发导致行级锁
查看>>
非阻塞socket调用connect, epoll和select检查连接情况示例
查看>>
《黑客与画家》读书笔记一
查看>>
演示热块——表数据块
查看>>
Zebra命令模式分析(二)[补]
查看>>
Windows操作系统---C Drive
查看>>
TDSS 0.0.2 测试版发布,分布式存储系统
查看>>
GNU Guile 2.0.9 发布,Scheme 实现
查看>>
矩形嵌套
查看>>
TPL中Task执行的内联性线程重入
查看>>
NS2中的随机数产生器(转)
查看>>
jQuery插件Asgrid添加表头排序的功能
查看>>
MySQL大量unauthenticated user
查看>>
systimestamp
查看>>
第九学 linux内核——内存寻址——分页机制(1)
查看>>
2013年5月13日星期一
查看>>
ssh之雇员管理系统(7)-spring可以启用注解的方式来配置属性+解决懒加载问题...
查看>>