一、为什么要写这篇文章
之所以专门写一篇文章来整理归纳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”
三、企业版、标准版、体验版对硬件资源的使用限制
1. SQL Server 2008 R2
硬件资源 | 数据中心版(Datacenter) | 企业版(Enterprise) | 标准版(Standard) | 体验版(Express) |
---|---|---|---|---|
CPU资源限制 | 操作系统支持的最大值 | 8核 | 4核 | 1核 |
最大内存资源 | 操作系统支持的最大值 | 2TB | 64GB | 1GB |
数据库最大磁盘空间 | 524PB | 524PB | 524PB | 10GB |
2. SQL Server 2012
硬件资源 | 企业版(Enterprise) | 智能商业版(Business Intelligence) | 标准版(Standard) | 体验版(Express) |
---|---|---|---|---|
CPU资源限制 | 操作系统支持的最大值 | 限制为4个插槽或16核,取二者中的较小值 | 限制为4个插槽或16核,取二者中的较小值 | 限制为1个插槽或4核,取二者中的较小值 |
最大内存资源 | 操作系统支持的最大值 | 64GB | 64GB | 1GB |
数据库最大磁盘空间 | 524PB | 524PB | 524PB | 10GB |
3. SQL Server 2014
硬件资源 | 企业版(Enterprise) | 智能商业版(Business Intelligence) | 标准版(Standard) | 体验版(Express) |
---|---|---|---|---|
CPU资源限制 | 操作系统支持的最大值 | 限制为4个插槽或16核,取二者中的较小值 | 限制为4个插槽或16核,取二者中的较小值 | 限制为1个插槽或4核,取二者中的较小值 |
最大内存资源 | 操作系统支持的最大值 | 128GB | 128GB | 1GB |
数据库最大磁盘空间 | 524PB | 524PB | 524PB | 10GB |
4. SQL Server 2016
硬件资源 | 企业版(Enterprise) | 标准版(Standard) | 体验版(Express) |
---|---|---|---|
CPU资源限制 | 操作系统支持的最大值 | 限制为4个插槽或24核,取二者中的较小值 | 限制为1个插槽或4核,取二者中的较小值 |
最大内存资源 | 操作系统支持的最大值 | 128GB | 1GB |
数据库最大磁盘空间 | 524PB | 524PB | 1410MB |
4. SQL Server 2017
硬件资源 | 企业版(Enterprise) | 标准版(Standard) | 体验版(Express) |
---|---|---|---|
CPU资源限制 | 操作系统支持的最大值 | 限制为4个插槽或24核,取二者中的较小值 | 限制为1个插槽或4核,取二者中的较小值 |
最大内存资源 | 操作系统支持的最大值 | 128GB | 1410MB |
数据库最大磁盘空间 | 524PB | 524PB | 10GB |
5. SQL Server 2019
硬件资源 | 企业版(Enterprise) | 标准版(Standard) | 体验版(Express) |
---|---|---|---|
CPU资源限制 | 操作系统支持的最大值 | 限制为4个插槽或24核,取二者中的较小值 | 限制为1个插槽或4核,取二者中的较小值 |
最大内存资源 | 操作系统支持的最大值 | 128GB | 1410MB |
数据库最大磁盘空间 | 524PB | 524PB | 10GB |
小结
- SQL Server 2008 R2 的最高级别版本为数据中心版(Datacenter);SQL Server 2012及其之后的版本,最高级别版均为企业版(Enterprise)。最高级别版本无硬件资源使用限制。
- SQL Server 还有一类版本:开发者版(Developer)。开发者版在功能以及硬件资源使用上,都等同于最高版本(数据中心版/企业版)。只是开发者版不能用于商业环境。
- 随着硬件资源的不断提升,标准版/体验版的硬件资源限制也在逐步放开。例如 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_schedulers
WHERE is_online = 1
AND 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版本划分的计算能力限制