一、为什么要写这篇文章

之所以专门写一篇文章来整理归纳SQL Server各个版本的功能区别,是因为遇到过两次真实的客户案例,因为数据库版本选取不当,导致生产系统宕机的情况。

案例一

某客户安装了 32位 版本的SQL Server 2008 R2 数据库,一到业务高峰期,数据库就卡死没反应!
32位程序最多只能使用4GB内存!而用户的数据量已经达到200多GB。数据量大,内存小,业务高峰期必然导致数据频繁的从磁盘读入内存、再从内存刷入磁盘。内存瓶颈继而引发了磁盘IO瓶颈,数据库卡死就不足为怪了。

问题情况见如下截图:
图1:查询版本确定是32位版本数据库

图2、图3:主机内存有32GB,而32位版本数据库最大使用内存不超过4GB

案例二

某客户现场装了一套新的SQL Server实例,运行没多久系统报错:“PRIMARY 文件组已满”。最终定位原因,安装的数据库版本是:SQL Server 2014 个人体验版 (Express Edition)。 个人体验版最多使用 10GB 磁盘空间!

二、查询数据库版本详细信息

要做到正确选用数据库版本,第一步工作是学会查询当前数据库版本详细信息。
查询命令:

select @@VERSION


查询命令输出的信息内容很多,可以分解为如下几部分:

1. 版本摘要信息
版本主要信息,版本号、补丁包信息等,如:

  • “Microsoft SQL Server 2008 R2 (SP3)”
  • “Microsoft SQL Server 2017 (RTM)”

2. 详细版本号
SQL Server 详细版本号格式: 主版本号.次版本号.update版本号.编译版本号
如:

  • “10.50.6000.34”
  • “14.0.1000.169”

其中主版本号的定义如下:

  • 8 – SQL Server 2000
  • 9 – SQL Server 2005
  • 10 – SQL Server 2008
  • 11 – SQL Server 2012
  • 12 – SQL Server 2014
  • 13 – SQL Server 2016
  • 14 – SQL Server 2017
  • 15 – SQL Server 2019

3. 32位/64位信息
标识数据库版本是32位还是64位

  • X86 – 32位版本
  • X64 – 64位版本

4. 版本编译日期
如:“Aug 19 2014 12:21:34”, “Aug 22 2017 17:04:49”

5. 企业版/标准版/体验版信息
显示数据库版本是企业版、开发者版、标准版等信息。

  • 企业版 – “Enterprise Edition”
  • 开发者版 – “Developer Edition”
  • 标准版 – “Standard Edition”
  • 体验版 – “Express Edition”
  • 数据中心版 – “Data Center Edition”

三、企业版、标准版、体验版对硬件资源的使用限制

1. SQL Server 2008 R2

硬件资源数据中心版(Datacenter)企业版(Enterprise)标准版(Standard)体验版(Express)
CPU资源限制操作系统支持的最大值8核4核1核
最大内存资源操作系统支持的最大值2TB64GB1GB
数据库最大磁盘空间524PB524PB524PB10GB

2. SQL Server 2012

硬件资源企业版(Enterprise)智能商业版(Business Intelligence)标准版(Standard)体验版(Express)
CPU资源限制操作系统支持的最大值限制为4个插槽或16核,取二者中的较小值限制为4个插槽或16核,取二者中的较小值限制为1个插槽或4核,取二者中的较小值
最大内存资源操作系统支持的最大值64GB64GB1GB
数据库最大磁盘空间524PB524PB524PB10GB

3. SQL Server 2014

硬件资源企业版(Enterprise)智能商业版(Business Intelligence)标准版(Standard)体验版(Express)
CPU资源限制操作系统支持的最大值限制为4个插槽或16核,取二者中的较小值限制为4个插槽或16核,取二者中的较小值限制为1个插槽或4核,取二者中的较小值
最大内存资源操作系统支持的最大值128GB128GB1GB
数据库最大磁盘空间524PB524PB524PB10GB

4. SQL Server 2016

硬件资源企业版(Enterprise)标准版(Standard)体验版(Express)
CPU资源限制操作系统支持的最大值限制为4个插槽或24核,取二者中的较小值限制为1个插槽或4核,取二者中的较小值
最大内存资源操作系统支持的最大值128GB1GB
数据库最大磁盘空间524PB524PB1410MB

5. SQL Server 2017

硬件资源企业版(Enterprise)标准版(Standard)体验版(Express)
CPU资源限制操作系统支持的最大值限制为4个插槽或24核,取二者中的较小值限制为1个插槽或4核,取二者中的较小值
最大内存资源操作系统支持的最大值128GB1410MB
数据库最大磁盘空间524PB524PB10GB

6. SQL Server 2019

硬件资源企业版(Enterprise)标准版(Standard)体验版(Express)
CPU资源限制操作系统支持的最大值限制为4个插槽或24核,取二者中的较小值限制为1个插槽或4核,取二者中的较小值
最大内存资源操作系统支持的最大值128GB1410MB
数据库最大磁盘空间524PB524PB10GB

小结

  1. SQL Server 的各个历史版本中,除了 SQL Server 2008 R2 的最高级别版本为数据中心版(Datacenter),其余版本的最高级别版本均为企业版(Enterprise)。最高级别版本无硬件资源使用限制。
  2. SQL Server 还有一类版本:开发者版(Developer)。开发者版在功能以及硬件资源使用上,都等同于最高级别版本(数据中心版/企业版)。只是开发者版不能用于商业环境。
  3. 随着硬件资源的不断提升,标准版/体验版的硬件资源限制也在逐步放开。例如 SQL Server 2012 标准版最多使用64GB内存,而到了SQL Server 2014 提升到了128GB内存,这个策略挺好。

四、SQL Server 2012 及其之后的企业版license重要变更

上文中提到,SQL Server 2012及其之后的版本,最高级别的版本均为企业版,企业版对硬件资源的使用没有限制。其实这种说法并不准确,具体还要看在企业版的前提下,使用的是哪种license许可。

SQL Server 2012 及其之后的企业版版本,有两种类型的license许可:

  • 基于服务器+客户端访问许可证(CAL)的许可 –> 最多使用20核CPU
  • 基于内核的服务器许可 –>CPU使用无限制

官网说明如下:

查看数据库使用的是哪种license许可
如果是基于内核的服务器许可,在使用 select @@version 查看版本详细信息时,输出的结果中会有关键字:Core-based Licensing。如果不存在该关键字,则说明是基于服务器+客户端访问许可证(CAL)的许可。

基于内核的服务器许可:

基于服务器+客户端访问许可证的许可:

实例验证
以一个实际例子验证:即使数据库已经是企业版,但如果license使用的是基于服务器+客户端访问许可证的情况下,数据库最多使用20核CPU!

1)查询数据库版本
数据库版本为2014企业版,但是”select @@version”查询结果中没有关键字”Core-based Licensing”,顾为基于服务器+客户端访问许可证(CAL)的许可。

2) 查询服务器CPU总核数

select cpu_count from sys.dm_os_sys_info


3) 查看数据库实例实际使用的CPU核数

SELECT COUNT(*)FROM sys.dm_os_schedulersWHERE is_online = 1AND status = 'VISIBLE ONLINE' 


可以看到,服务器一共32核CPU,数据库虽然是企业版,但是实际只使用了20核CPU。

4) 更改数据库license序列号,更改为基于内核的服务器许可
网上有更改license序列号的步骤,此处略

5)验证license类型更换是否成功

6)再次查询当前实例实际使用的CPU核数

可以看到,license升级为”基于内核的服务器许可”后,数据库就可以使用服务器上的全部32核CPU!

参考文章
[1] SQL Server 2008 R2 各个版本支持的功能官网说明
[2] SQL Server 2012 各个版本支持的功能官网说明
[3] SQL Server 2014 各个版本支持的功能官网说明
[4] SQL Server 2016 各个版本支持的功能官网说明
[5] SQL Server 2017 各个版本支持的功能官网说明
[6] SQL Server 2019 各个版本支持的功能官网说明
[7] 官网:按SQL Server版本划分的计算能力限制