SQLServer 2012异常问题(二)--由安装介质引发性能问题

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 原文:SQLServer 2012异常问题(二)--由安装介质引发性能问题问题描述:生产环境一个数据库从SQLSERVER 2008 R2升级到SQLSERVER 2012 ,同时更换硬件,但迁移后发现性能明显下降,应用写入、读取性能下降的比较厉害;   向微软寻求帮助后得出答案,原来这与SQLSERVER的安装介质有关。
原文: SQLServer 2012异常问题(二)--由安装介质引发性能问题

问题描述:生产环境一个数据库从SQLSERVER 2008 R2升级到SQLSERVER 2012 ,同时更换硬件,但迁移后发现性能明显下降,应用写入、读取性能下降的比较厉害;

 

向微软寻求帮助后得出答案,原来这与SQLSERVER的安装介质有关。

大致意思是说由于NUMA架构可以自行管理内存池,在安装了CAL的EE后,由于限制只能使用20个cores,同样内存则只能管理到20个cores涉及到的NUMA的对应的内存空间(具体算法为 限制内存=当前物理内存/NUMA数量*(总核数/20)),如果限制SQL Server的最大使用内存超过前面说的限制内存,则当使用内存大于限制内存需要再向操作系统再申请空间时,则会产生跨NUMA处理的情况,导致大量消耗系统资源,引起性能下降;

 

http://blogs.msdn.com/b/saponsqlserver/archive/2012/06/15/sql-server-2012-enterprise-editions.aspx

这是我在网上找到的解释,摘录其中几段(本人E文水平有限,翻译不当之处敬请见谅)

关于SQLSERVER EE的安装介质(EE为Enterprise Editions简拼,企业版)

  • SQL Server EE is no longer being offered under the Server + CAL (Client Access License) licensing model. For customers with Software Assurance on existing SQL EE Server licenses (or access to them under their current Enterprise Agreements during term) a version of Enterprise Edition was created to enable them to upgrade to SQL Server 2012. This version has technical restrictions limiting an instance to using only 20 processor cores (40 CPU threads with Hyperthreading).. Customers must still have the proper version of the CAL and additional physical and virtual use right restrictions of this SKU (Stock Keeping Unit) apply. Please refer to the three documents listed above for additional details.
  • An Enterprise Edition which is licensed per core and which does not have limits on the # of cores usable on a server (within the absolute limits supported). This Enterprise Edition does reflect the new licensing model for SQL Server Enterprise Edition.

上面说到 即便是SQLSERVER EE,由于授权方式的差异导致对processor cores的限制

For customers with Software Assurance on existing SQL EE Server licenses

An Enterprise Edition which is licensed per core and which does not have limits on the # of cores usable on a server

通过以下方式可以检查当前运行的SQL EE信息

1、sp_readerrorlog ,第一行显示SQLSERVER 版本信息如下

2012-05-08 16:04:54.56 Server      Microsoft SQL Server 2012 - 11.0.2100.60 (X64)

             Feb 10 2012 19:39:15

             Copyright (c) Microsoft Corporation

Enterprise Edition (64-bit)on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

2、select serverproperty('Edition') ,显示版本信息如下

Enterprise Edition (64-bit)

如何判断当前的SQL EE是基于per CAL还是per core的呢?如果显示的信息如上所示,那就是基于per CAL的,文中再次强调此模式下受限于20 cores;

Answer is: It is the CAL licensed one and with that the Enterprise Edition which is limited to 20 cores!!!

而如果显示的信息如下所示,那就是基于per core的 则没有限制;

The per-core licensed Enterprise Edition will show like this:

2012-05-18 23:57:29.77 Server Microsoft SQL Server 2012 - 11.0.2100.60 (X64)

Feb 10 2012 19:39:15

Copyright (c) Microsoft Corporation

Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

 Executing:

select serverproperty('Edition')

which then could show this result:

Enterprise Edition: Core-based Licensing (64-bit)

 

关于20 cores的限制问题,需要区分CPU是否支持超线程而言

Other indications that there might be a limitation to 20 cores could be identified as well at the beginning of the SQL Server 2012 errorlog where we can find a message like:

SQL Server detected 4 sockets with 6 cores per socket and 6 logical processors per socket, 24 total logical processors; using 20 logical processors based on SQL Server licensing.

In the case above, we are looking at a server with the last generation of Intel processors which did not have Hyperthreading yet. Or in more modern Intel Servers with Hyperthreading it would look like:

SQL Server detected 4 sockets with 8 cores per socket and 16 logical processors per socket, 64 total logical processors; using 40 logical processors based on SQL Server licensing.

上文中的描述,根据SQL Server 2012 errorlog中的内容,我们可以看到

如果SQL Server 检测到 4个插槽,每个插槽有6个核,且有6个逻辑处理器(单线程),则总共为24个逻辑处理器,受限于SQL Server licenseing,只能使用20个逻辑处理器;

对于超线程CPU:

如果SQL Server 检测到 4个插槽,每个插槽有8个核,且有16个逻辑处理器(单线程),则总共为64个逻辑处理器,受限于SQL Server licenseing,只能使用40个逻辑处理器;

 

Another possibility of discovery is through the Microsoft MAP toolkit. Where to get it and how to use it is excellently described in this document: http://download.microsoft.com/download/F/F/2/FF29F6CC-9C5E-4E6D-85C6-F8078B014E9F/Determining_SQL_Server_2012_Core_Licensing_Requirements_at_SA_Renewal_Apr2012.pdf

另外一种可能的发现是通过Microsoft MAP toolkit,可以在以下这个文档中得到更准确的描述;

---------------------------华丽丽的分割线---------------------------------------

How is the throttle of 20 cores enforced for the CAL license-based Enterprise Edition?

The limitation or the cap is enforced by the # of SQL Server schedulers. Usually SQL Server creates one scheduler thread for every logical CPU on a server. Each of those scheduler threads is administrating a pool of worker threads which execute requests or are in different other states. A scheduler only can have one thread running at maximum. If a scheduler thread over all of the time has one of worker threads running, it can leverage at maximum one logical CPU and not a bit more. If there are (as in the second situation above) only 40 schedulers active to schedule worker threads, the maximum number of CPU power we can use at any given time is 40 logical CPUs.

Querying sys.dm_os_schedulers with this query:

select * from sys.dm_os_schedulers

we will realize that the all the schedulers are ‘Visible’ for all the logical CPUs, but only 40 of them will be ‘Online’, whereas the others are ‘Offline’

If you disable Hyperthreading, the number of schedulers being Online will decline to 20, since one single core is now represented by one CPU thread only compared to two with Hyperthreading enabled. In cases where there are many more CPU threads or logical CPUs than the limit of the Server+CAL licensed SQL Server 2012 Enterprise Edition, one certainly can use affinity mask settings to chose the CPUs SQL Server shall use.

通过sys.dm_os_schedulers这个DMV可以查询到SQL Server调度线程的情况;

 

如何在EE的两个不同的产品间变更?在下面的链接中可以找到答案

http://msdn.microsoft.com/zh-cn/library/ms143393.aspx

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
打赏
0
0
0
0
216
分享
相关文章
win10 安装 sql server2012
安装 SQL Server 2012 是许多开发者使用数据库的第一步。主要步骤包括:下载并运行安装程序,接受许可条款,选择功能(如数据库引擎服务),配置实例和服务器设置,设置身份验证模式,完成安装并进行测试。建议安装 SQL Server Management Studio (SSMS) 进行管理和维护,确保数据安全。
69 3
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第16天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括配置系统源、安装 SQL Server 2019 软件包以及数据库初始化,确保 SQL Server 正常运行。
252 4
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
244 1
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
174 1
机房电脑下载并安装SQL Server的详细步骤
在机房电脑上下载并安装SQL Server是一个常见的任务,特别是对于学习数据库管理或进行相关项目开发的学生和开发者来说
SQL Server2014的安装与配置
SQL Server2014的安装与配置
298 0
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
729 3
SQL Server 2016 安装
SQL Server 2016 安装
60 0
|
11月前
|
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
94 4

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等