本文共 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.ldf2013-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/