65.9K
CodeProject 正在变化。 阅读更多。
Home

SQL 2019 - 新功能

starIconstarIconstarIconstarIconstarIcon

5.00/5 (3投票s)

2020年1月14日

CPOL

14分钟阅读

viewsIcon

13160

SQL 2019新功能

背景

Microsoft SQL Server 数据库 1.0 的第一个版本于 1989 年开发,至今仍在不断发展,随着每个版本的改进,其灵活性和可用性也在不断提高。SQL 2017 于 2017 年发布,支持 Linux(Redhat、Ubuntu、Linux Server)和 Docker 引擎,这是 SQL 团队迈出的重要一步。从 SQL Server 2016 开始,SQL 只支持 64 位处理器,现在他们又随着当前版本向前迈进了一步。

(**在此查看 SQL 2017 的新功能。)

引言

现在,SQL 于 2019 年 11 月发布了其新版本(15.0)。此版本的 SQL Server 主要着重于 Hadoop、Apache Spark 等分布式文件系统之间的数据交换、连接大数据、改进安全性、提高性能、可伸缩性和智能性。您可以在 Windows、Linux 或 Docker 环境中安装 SQL 2019。让我们来回顾一下其创新性和合规性功能。

面向开发者

此版本为开发人员带来了新的出色功能,例如图表的改进、UTF-8 支持、空间数据类型的变化,以及一个允许开发人员使用任何他们选择的语言检索和访问数据的新框架。让我们来详细了解一下。

图增强

  • 如果您曾经处理过图数据库(图数据库概念在 SQL 2017 中引入,您可以在此处查看),那么您一定知道边约束,它用于保持图数据库边表的数据完整性。SQL 2019 中的边约束概念有所变化,现在我们可以在边约束上定义级联删除操作。
  • 表和索引分区概念现在也支持图表。
  • 图数据库引入了一个新函数,用于查找图中两个给定节点之间的最短路径,这对于节点遍历可能很有用。新函数的名称是 SHORTEST_PATH,它与 MATCH 函数在 SELECT 语句中使用。

UTF-8 支持

如今,数据库在语言支持方面需要更加强大,这可以视为现实世界的要求。在此版本的 SQL 中,数据库现在支持 UTF-8 字符编码。现在它对导入和导出到数据库、表或列级别的排序规则的编码提供了良好的支持。Polybase 和 Always Encrypted 等功能也涵盖在内。UTF-8 允许在 charvarchar 数据类型中使用,因此在排序规则中,您现在可以使用 UTF-8。请参阅下面的示例,这将消除您的疑虑。

假设我有一个排序规则为 LATIN1_GENERAL_100_CI_AS_SC 的表。在这里,AS 表示该表可以存储区分大小写的重音数据(区分大小写的重音意味着支持重音字符,例如支持 'a' 和 '')。上述排序规则可以更改为 LATIN1_GENERAL_100_CI_AS_SC_UTF8

错误消息

当我们将数据从一个表加载到另一个表或从一个数据库加载到另一个数据库时,可能会因为数据类型或数据大小限制不匹配而导致失败,并且如果需要传输的数据量很大,跟踪此错误可能会非常耗时。在这种情况下,SQL 2019 引入了 'VERBOSE_TRUNCATION_WARNINGS' 属性,可以将其设置为 ONOFF。如果将其设置为 ON 以处理数据截断错误,我们的传统消息将被新的高级描述性消息和错误代码(2628)覆盖。错误消息如下所示:

'String or binary data would be truncated in table 'BLAH', column 'BLAH'. 
Truncated value: 'BLAH'.

在这里,您将在错误消息中看到有关表名、列名和截断值等的详细信息。我认为这将是 SQL 中推荐的开发人员功能之一。

如果我们将属性标志设置为 OFF,我们将收到常规的旧式消息,如下所示:

'String or binary data would be truncated.

语言支持

SQL Server 2019 现在支持 Java 语言 SDK,基本上这是对开源 Java SDK 的扩展支持。此版本的 SQL 还支持各种 Java 数据类型,例如 floatjava.sql.datejava.mathjava..sql.timestamp

SQL Server 还附带了语言扩展包,它提供了一种执行外部代码的方式。代码的执行是隔离进行的,这样核心引擎就不会受到此操作的影响。此扩展确保了安全性,因为代码在数据所在的位置执行,因此它会忽略从网络外部提取数据的过程并强制执行安全约束。

空间参考标识符

您知道空间数据类型吗?此数据类型的数据用于存储有关物理位置和地理对象的信息,这些对象可以是道路、河流、道路或树木(世界上任何东西)。在 SQL 2019 中,空间参考系统发生了变化,基本上添加了两个新的空间参考:7843 用于地理 2D,7844 用于地理 3D,这符合澳大利亚 GDA2020[参考:MSDN]。

大数据支持

SQL Server 2019 引入了大数据群集,这将为处理大数据、大型数据集和人工智能提供良好的支持。

使用 SQL 2019,您现在可以使用 Spark 来处理、交易大数据。

它可以轻松地将大数据与关系数据连接,并查询外部数据源。

SQL 用户使用 HDFS 容器来管理和存储大数据。

加速数据库恢复 [ADR]

SQL Server 2019 具有最快的数据库恢复功能。如果存在一些长时间运行的事务或数据库故障,并且该数据库的 ADR(加速数据库恢复)已开启,那么它将以闪电般的速度回滚进程。它还有助于取消长时间运行的挂起数据库进程。

语法如下:

ALTER DATABASE <db_name> SET ACCELERATED_DATABASE_RECOVERY = ON;

在上面的语法中,db_name 是要在其上将加速数据库恢复设置为 ON 的数据库名称。

联机操作

SQL Server 2019 允许用户在数据库或底层表正在忙于操作时创建、重建、修改或删除聚集索引。这意味着一个用户可以重建索引,同时另一个人可以在同一个数据库或数据库表上执行更新查询(这难道不是一项很棒的功能吗?)。在早期版本的 SQL Server 中,我们需要在离线模式下重建索引,此外,它会持有数据库及其数据表的独占锁,这将阻止整个表。请参阅下面的语法。

ALTER INDEX index_name
ON table_name
REBUILD WITH (ONLINE = ON);

在上面的语法中,index_name 是需要创建、修改或删除的索引的名称,其中 ONLINE 标志为 ON

始终可用

数据库服务器的首要业务需求是随时可用。为了使业务顺利运行,数据库需要始终可用并且永不宕机。为了维持这一点,当主数据库发生故障时,我们应该有一个始终可用的数据库副本。考虑到这一关键要求,SQL 2019 将其并发副本的最大数量延长至 5 个,而在早期版本的 SQL(2017)中,它是 3 个。这里,其中一个副本是主副本,其他是辅助副本。

SQL 2019 还引入了另一个附加功能:客户端应用程序可以连接到主副本,而无需考虑连接字符串。

改进的安全性

多年来,SQL 一直在处理安全性方面的问题,并且在每个版本中都提供了更安全稳定的基础结构。在 SQL 2019 中,某些安全功能也得到了改进,例如 Always Encrypted、证书管理、数据发现和审核。让我们来详细了解一下。

带有安全 enclave 的 Always Encrypted

Always Encrypted 功能已在早期版本(2017)中发布。在此版本中,Always Encrypted 带有安全 enclave。我们知道 Always Encrypted 功能通过加密数据来提供数据安全。但是此功能存在一些限制,例如:

  • 由于数据在 SQL Server 内部也是加密的,因此很难对加密数据执行其他操作(只能对加密数据执行相等性比较)。
  • 要对这些加密数据执行其他操作,用户需要将数据移出数据库然后解密。

为了克服这些限制,引入了安全 enclave,在其中数据在安全 enclave 中转换为纯文本,并且所有其他操作都将成为可能。安全 enclave 就像一个安全的地方,供 SQL 处理敏感数据。

要对数据执行其他操作,我们需要将它们从 SQL 中提取出来并解密。

数据分类

这也是 SQL 2019 的一项不错的功能,我们可以根据业务部门或主题(例如医疗数据、健康数据、金融数据等)对数据进行分类。这将带来按照不同数据集应用不同安全标准的便利。简而言之,如果我们单独识别和分类数据,那么根据数据的性质应用不同的安全策略会更容易。

ADD SENSITIVITY CLASSIFICATION 是用于为不同列分配数据分类标签和信息类型的属性,请参阅下面的示例:

ADD SENSITIVITY CLASSIFICATION TO
dbo.column1, dbo.column2
WITH ( LABEL='Confidential Data', INFORMATION_TYPE='Business' )

在上面的代码片段中:

Column1Column2 是我们应用了数据分类标签和信息类型的列。

证书管理

SSL/TSL 证书可在 SQL 中用于维护和增强安全性,但在早期版本中,我们需要运行一些脚本和手动命令来使用这些证书。但在当前版本中,证书管理是 SQL 配置管理的一部分,它使证书安装更加便捷。

性能

每个版本的 SQL 都附带一些性能提升技巧和窍门,但此版本的 SQL 在性能和执行方面增加了**智能性**,这意味着它将为您的瓶颈和慢速事务提供可预测的性能步骤。SQL 2019 引入了一些与智能性能相关的功能,例如查询强制计划、减少重新编译、顺序键优化。让我们来详细了解一下。

查询强制计划

在此功能中,查询存储现在能够通过 sp_query_store_force_plan 或使用查询存储报告(存在于 SQL Server Management Studio 中)为静态和快速游标驱动查询执行计划。

减少重新编译

SQL Server 引入了一项新功能,可以减少跨多个范围的临时表的计算工作负载的重新编译。在早期版本的 SQL 中,当对 temp 表执行某些 DML 语句并且该表在范围外创建时,DML 语句会每次重新编译。有了此功能,即使 temp 表在范围外创建,也无需重新编译 SQL 语句。

顺序键优化

如果您的应用程序具有高并发性,并且您的 insert 查询中包含索引,那么此功能将为您带来巨大的好处。此功能有助于 SQL 引擎在存在高并发情况时,更准确地插入主键或日期时间数据。

内存数据库支持

SQL 2019 构建并支持多个内存数据库,这些数据库支持数据库工作负载的可伸缩性和性能。此外,它还引入了 OLTP 以实现更好的执行(OLTP:联机事务处理)。SQL Server 发布了以下功能,作为内存数据库支持的一部分。

混合缓冲池

此功能旨在访问持久内存并从数据库(存储在持久内存中)中提取数据页文件。这可以通过 SQL Server 数据库引擎完成。在早期版本中,SQL 引擎会将数据存储在缓冲池中,而有了此功能,SQL Server 不会将数据复制到缓冲池,而是直接从持久设备访问数据页。

OLTP 支持数据库快照

在此版本中,SQL 引擎为数据库快照提供了联机事务支持。数据库快照就是数据库的静态只读视图。此快照在创建快照时与数据库事务一致。快照的好处是,您可以从其中查询以生成不同的数据,这些数据可以用于 MIS 或报告。快照是只读的,没有数据丢失的风险。

TempDB 支持

TempDB 存在工作负载时,瓶颈和可伸缩性问题总是存在。为了解决这个问题,SQL 推出了内存优化 TempDB 元数据,这有助于消除瓶颈并提高可伸缩性。基本上,系统表在这里用于管理此操作,其中临时表元数据移至内存优化表。

广泛的平台支持

从 SQL 2017 开始,它就支持 Linux 平台,现在它在以下功能方面有了很大的改进:

  • Linux 上的复制功能
  • 改进了对 MSDTC(Microsoft 分布式事务协调器)的支持
  • 第三方 AD 支持
  • Polybase 非 Hadoop 支持
  • Change Data Capture (CDC) 现在支持 Linux 上的 SQL

监控

我们需要对 SQL 中的每项操作和功能进行监控。如果发现任何问题或性能不足,我们需要转向 SQL 监控技术。SQL 2019 引入了一些改进监控的附加功能。

sys.dm_os_wait_stats

SQL 2019 中引入了一个新的等待统计信息,它将帮助我们返回已执行操作的所有等待信息。您可以使用此报告进行性能诊断。

lightweight_query_profiling

此属性有助于我们监控 SQL 查询,它提供了分析基础结构,该基础结构负责处理工作负载的执行方式以及资源的利用情况。所以这只是一个性能测量技术。

自定义捕获策略

此策略在查询存储中引入。基本上,这是查询存储策略设置,用于微调特定服务器的数据收集。我们可以启用或禁用此策略。我们可以使用 ALTER DATABASE SET 选项来使用此策略。

dm_exec_query_plan_stats

这是 Transact SQL 的一个新函数,用于返回最近缓存的查询计划的最后一个已知执行计划。

智能查询处理

此功能已在 SQL 2019 中引入。当关键数据库工作负载并行运行时,智能查询处理 (IQP) 可降低风险并提高工作负载的性能,同时对现有系统的影响更小。以下功能已引入以支持 IQP。

行模式内存授予反馈

此功能用于调整行模式和批处理模式运算符的内存和授予大小。此功能可以设置为 ONOFF,它与 ALTER DATABASE 语句一起使用,请参阅下面的语法:

ALTER DATABASE SCOPED CONFIGURATION SET ROW_MODE_MEMORY_GRANT_FEEDBACK = OFF;

标量 UDF

标量 UDF 就是多语句标量函数。此函数只接受一个值作为输入,并生成一个聚合值作为输出。SQL 在此标量 UDF 上引入了内联功能,该功能会将所有函数转换为关系表达式,然后将它们放入调用 SQL 查询中。这将提高工作负载的性能。但要使用此功能,我们需要使用数据库兼容级别 150。

表变量延迟编译

如果您有引用表变量的查询,那么此功能将有助于提高性能和计划质量。如果查询引用表变量,则编译过程会被延迟直到第一次执行。基本上,在此过程中,它会获取实际的表变量行计数,然后此计数将用于下游计划操作。

近似查询处理

这是最有趣的功能之一,它返回一个近似值而不是精确值。例如,如果我的表中有数十亿的地理数据,并且我想获得 DISTINCT 行的 COUNT,那么为了更快地处理查询,APPROX_COUNT_DISTINCT 将运行得更快并返回近似结果,因为响应速度在这里至关重要。此函数将返回非 null 值。

内存设置选项

在 SQL Server 2019 中,我们现在可以:

最小内存

设置最低服务器内存(即 SQL 引擎的最低内存限制),它应低于 0。此内存将用于缓冲池和缓存内存。

最大内存

设置最大服务器内存(即 SQL 引擎的最大内存限制),默认值为 2048 TB。

这是数据库引擎配置的内存页面的一部分。

SQL 机器学习新功能

SQL 机器学习服务已引入以下功能:

  • 为确保机器学习服务的高可用性,我们可以在 Windows Server 中配置故障转移群集。
  • 您现在可以使用新的参数 'sp_execute_external_script' 按分区执行外部脚本。

SSRS(Reporting Services)新功能

SQL Reporting Services 已引入以下功能:

  • 现在可以通过报表生成器或数据集工具与 Power BI dataset 进行连接。
  • 工具提示可用于指示报表中每个元素的文本,它也称为 AltText 功能。
  • 如果您正在管理 Azure Web 应用程序代理的安全,那么从现在开始,您可以使用 Azure Active Directory 代理支持功能,该功能将允许安全访问您的应用程序。
  • 您可以使用 RegeX 模式来处理您的 URL 并自定义您的标头。
  • 已发布新报表,该报表与早期版本的 SQL(如 2016、2017)兼容。

本文只是对 SQL 2019 所提供功能的概述,每个要点都可以进一步详细阐述。在下一篇文章中,我们可能会尝试涵盖这些内容。在此之前,您可以欣赏本文。

欢迎随时提出疑问和建议!

感谢阅读!

历史

  • 2020 年 1 月 14 日:初始版本
© . All rights reserved.