2019.11.4 SQL Server 2019发布,趁热打铁了解下2019的新特性。下面整理一些个人感觉重要的或者工作上能用到的新特性,有删减,完整版参考 SQL Server 2019 中的新增功能 - SQL Server | Microsoft Learn
SQL Server 2019 (15.x) 在早期版本的基础上构建,旨在将SQL Server发展成一个平台,以提供开发语言、数据类型、本地或云以及操作系统选项。
一、 数据虚拟化和SQL Server 2019大数据群集
SQL Server大数据集群可深度集成行业标准大数据源,并提供新的数据虚拟化功能。SQL Server 2019大数据集群利用PolyBase功能实现数据虚拟化,这可结合多个来源的数据,而无需移动或复制数据。
大数据集群基于多种不同的技术,包括Docker容器、Apache Spark、Hadoop和Kubernetes中的SQL Server on Linux。 使用户能够在Kubernetes上部署可扩展的SQL Server容器集群,这些集群可使用Transact-SQL读取、写入和处理大数据。

新增功能或更新  | 详细信息  | 
可缩放的大数据解决方案  | 
 详情参考什么是 SQL Server 大数据群集  | 
通过Polybase进行数据虚拟化  | 
  | 
二、 智能数据库
1. 智能查询处理
新增功能或更新  | 详细信息  | 
行模式内存授予反馈(Row mode memory grant feedback)  | 通过调整批处理模式和行模式运算符的内存授予大小,扩展了批处理模式内存授予反馈功能。 避免内存过度授予导致的内存浪费和并发减少,以及内存授予不足导致操作须在磁盘执行的问题。详细参考行模式内存授予反馈。  | 
表变量延迟编译  | 提升了引用表变量的查询的计划质量和整体性能。 在优化和初始编译期间,此功能传播基于实际表变量行计数的基数估计,这种准确的行计数信息可优化下游计划操作。 详细参考表变量延迟编译。  | 
使用APPROX_COUNT_DISTINCT进行近似查询处理  | 强调响应速度而非绝对精度,结果估计在实际值的2%以内。近似查询处理。类型Oracle。  | 
行存储上的批处理模式(Batch mode on rowstore)  | 批处理模式在分析工作负荷期间可更高效地使用CPU,但低于2019的版本中,只有当查询包含具有列存储索引的运算时才使用它。 然而,有些应用程序可能会使用列存储索引不支持的功能,因此无法利用批处理模式。从2019开始批处理模式执行不再要求必须有列存储索引。参考Batch mode on rowstore。  | 
2. 内存数据库
新增功能或更新  | 详细信息  | 
混合缓冲池  | 可在需要时直接访问位于永久性内存 (PMEM) 设备上数据库文件中的数据库页。 参阅混合缓冲池。  | 
内存优化的TempDB元数据  | 2019中,管理临时表元数据涉及的系统表可以移动到无闩锁的非持久内存优化表中( latch-free non-durable memory-optimized tables),这可以有效地消除瓶颈并减轻TempDB繁重的工作负荷。 请参阅内存优化 TempDB 元数据。  | 
In-Memory OLTP支持数据库快照  | 支持对包含内存优化文件组的数据库创建数据库快照。  | 
3. 智能性能
新增功能或更新  | 详细信息  | 
OPTIMIZE_FOR_SEQUENTIAL_KEY  | 有助于提高索引高并发插入的吞吐量,适用于易发生last-page 插入争用的索引,常见于有顺序键(如标识列、序列或日期/时间列)的索引。详情参考 CREATE INDEX。  | 
强制快进和静态游标(Forcing fast forward and static cursors)  | Query Store plan支持强制快进和静态游标。 请参阅计划强制支持快进和静态游标。  | 
资源调控  | ALTER | CREATE WORKLOAD GROUP的REQUEST_MAX_MEMORY_GRANT_PERCENT选项可配置值从整型更改为浮点型,允许更精细的内存限制。 请参阅修改工作负载组和创建工作负载组。  | 
减少重编译负载  | 通过减少不必要的重编译,提升了跨多个作用域(multiple scopes)使用临时表时的性能。 请参阅减少了对工作负荷的重新编译  | 
Indirect checkpoint scalability  | 请参阅改进了间接检查点可伸缩性。  | 
并发PFS更新  | PFS 页是数据库文件中的特殊页面,用来在为对象分配空间时帮助定位可用空间。 PFS页上的页闩锁争用通常与tempdb相关,但当并发过高时也可能会发生在用户数据库上。 此改进改变了并发PFS更新的方式,能在共享闩锁(而不是排他闩锁)下进行更新。 2019起,此行为默认在所有数据库(包括tempdb)中启用。  | 
4. 监控
新增功能或更新  | 详细信息  | 
WAIT_ON_SYNC_STATISTICS_REFRESH  | sys.dm_os_wait_stats视图中新增的等待类型。 它表示实例级别上同步统计信息刷新操作(synchronous statistics refresh operations)累计耗费的时间。 请参阅 sys.dm_os_wait_stats。  | 
自定义Query Store捕获策略  | 启用后,在“Query Store捕获策略”下会有额外的Query Store配置,可更好地调整特定服务器中数据收集内容。请参阅 ALTER DATABASE SET 选项。  | 
LIGHTWEIGHT_QUERY_PROFILING  | 新数据库范围配置。 请参阅 LIGHTWEIGHT_QUERY_PROFILING。  | 
sys.dm_exec_requests的command列  | 如果select正在等待同步统计信息更新操作,会显示SELECT (STATMAN)。请参阅 sys.dm_exec_requests。  | 
sys.dm_exec_query_plan_stats  | 新的DMF,返回查询最后的实际执行计划。请参阅 sys.dm_exec_query_plan_stats。  | 
LAST_QUERY_PLAN_STATS  | 启用sys.dm_exec_query_plan_stats的配置。 请参阅 ALTER DATABASE SCOPED CONFIGURATION。  | 
query_post_execution_plan_profile  | 基于轻量级profiling的收集实际执行计划的扩展事件,与基于profiling的query_post_execution_showplan不同。请参阅查询分析基础结构。  | 
sys.dm_db_page_info(database_id,file_id,page_id,mode)  | 新的DMF,返回数据库中的page信息。请参阅sys.dm_db_page_info (Transact-SQL)。  | 
三、 开发相关
1. Unicode 支持
新增功能或更新  | 详细信息  | 
支持UTF-8编码  | 支持使用UTF-8字符进行导入和导出编码,以及用作数据库级或列级排序规则。也支持用于PolyBase外部表和Always Encrypted(未用于 Enclave 时)。  | 
2. 语言扩展
除了用 R 和 Python 编写的代码外,开发人员现在还可以在 SQL Server 脚本和存储过程中执行 Java 代码
3. 错误信息
新增功能或更新  | 详细信息  | 
详细截断警告  | 截断错误信息默认包括表名和列名以及截断值。 请参阅 VERBOSE_TRUNCATION_WARNINGS。  | 
五、 关键任务安全性
新增功能或更新  | 详细信息  | 
Always Encrypted with secure enclaves  | 通过对服务器端安全隔离区中的纯文本数据启用计算,Always Encrypted扩展了就地加密(in-place encryption)和丰富计算(rich computations)功能。就地加密可提高加密列、旋转列加密密钥等加密操作的性能和可靠性,因为这样可以避免将数据移出数据库。 对丰富计算(模式匹配和比较操作)的支持可将 Always Encrypted 解锁到一组更广泛的方案和应用程序。 请参阅包含安全 Enclave 的 Always Encrypted。  | 
SQL Server 配置管理器中的证书管理  | 请参阅证书管理(SQL Server 配置管理器)。  | 
六、 高可用性
1. 可用性组
新增功能或更新  | 详细信息  | 
最多五个同步副本  | 2019将同步副本的最大数目从2017中的3个增加到了5个(一主四从)  | 
次要副本到主要副本连接重定向  | 允许配置客户端在从库的读写操作自动重定向到主库。请参阅次要副本到主要副本读/写连接重定向(AlwaysOn 可用性组)。类似Oracle 19c。  | 
2. 恢复
新增功能或更新  | 详细信息  | 
加速数据库恢复(accelerated database recovery)  | 通过accelerated database recovery(ADR)减少重启或长事务回滚后的数据库恢复时间。请参阅加速数据库恢复。  | 
3. 可重新开始的操作(Resumable operations)
新增功能或更新  | 详细信息  | 
Online clustered columnstore index build and rebuild  | 请参阅联机执行索引操作。  | 
Resumable online rowstore index build  | 请参阅联机执行索引操作。  | 
Suspend and resume initial scan for Transparent Data Encryption (TDE)  | 请参阅透明数据加密 (TDE) 扫描 - 暂停和继续。  | 
七、 设置
新增功能或更新  | 详细信息  | 
新内存设置选项  | 在安装过程中设置“最小服务器内存(MB)” 和“最大服务器内存(MB)” 服务器配置, 建议值遵循服务器内存配置选项中的内存配置准则。请参阅“数据库引擎配置 - 内存”页。  | 
新并行度设置选项  | 在安装过程中设置“最大并行度” 服务器配置。默认值遵循配置服务器配置选项“最大并行度”中的最大并行度准则。请参阅“数据库引擎配置 - MaxDOP”页。  | 
八、 Linux相关新特性
新增功能或更新  | 详细信息  | 
支持复制  | Linux 上的 SQL Server 复制  | 
支持 Microsoft 分布式事务处理协调器 (MSDTC)  | 如何在 Linux 上配置 MSDTC  | 
OpenLDAP支持第三方AD供应商  | 教程:对 Linux 上的 SQL Server 使用 Active Directory 身份验证  | 
支持机器学习  | 在 Linux 上配置机器学习  | 
TempDB改进  | 默认情况下,Linux 上的 SQL Server 新安装会根据逻辑核心数创建多个 TempDB 数据文件(最多 8 个数据文件)。 这不适用于就地次要版本或主版本升级。 每个 TempDB 文件的大小为 8 MB,且自动增长大小为 64 MB。 此行为类似于 Windows 上的默认 SQL Server 安装。  | 
支持PolyBase  | 在 Linux 上为非 Hadoop 连接器安装 PolyBase。 PolyBase 类型映射。  | 
支持变更数据捕获 (CDC)  | Linux 上的 SQL Server 2019 现在支持变更数据捕获 (CDC)。  | 
九、 容器
 
新功能或更新  | 细节  | 
Microsoft容器注册表  | Microsoft Container Registry现在替换Docker Hub作为微软新官方容器镜像  | 
Non-root containers  | 2019允许以非root用户身份启动SQL Server进程来创建更安全的容器。请参阅以非root用户身份构建和运行SQL Server容器。  | 
红帽认证的容器镜像  | 2019开始,可以在Red Hat Enterprise Linux上运行SQL Server容器。  | 
支持PolyBase和机器学习  | 参考 SQL Server in container GitHub repository.  | 
 
参考
What's new in SQL Server 2019 - SQL Server | Microsoft Learn
SQL Server 2019 中的新增功能 - SQL Server | Microsoft Learn
新年新气象,从SQL Server 2019新特性开始!_阿特
微软发布 SQL Server 2019 新版本_数据库_田晓旭_InfoQ精选文章










