随着面向主流的 SQL Server 2022 的发布,我们与 DBA 进行了交流,了解他们对新版本最感兴趣的内容。

参数敏感计划优化
Kat 将此作为她的主要功能之一。由于查询数据库的方式的性质,参数嗅探一直是许多客户系统中需要解决的“棘手”问题。Query Store 中的这一新功能将允许针对单个查询的多个缓存计划,这些计划可以根据运行时提供的值具有不同的数据分布。需要注意的一点是,与查询存储中的其他功能不同,数据库需要具有 160 的兼容级别才能启用该功能。
包含的可用性组
Ken H. 很高兴终于在 SQL Server 2022 版本中提供此功能。保持用户、登录名、权限、SQL Agent 作业等在副本之间同步是由人为错误造成的,这些错误在最糟糕的时间出现——在故障转移事件之后。
我们 DBA 通常打算在进行更改或添加副本时绕回,或者试图通过创建自动化流程来同步元数据来规避。现实是,至少在我的情况下,某些东西被遗漏了,只有在故障转移事件之后才会发现。
包含的可用性组扩展了正在复制的数据库组的概念,以包括 master 和 msdb 数据库的相关部分。这与包含的数据库不同,后者将用户信息存储在用户数据库中。在包含的可用性组中,用户、登录名、权限等在可用性组级别创建,并自动同步到所有副本。每个包含的可用性组都有自己的 master 和 msdb 系统数据库。
固定服务器角色
Faryl O. 期待添加其他内置服务器角色,例如 ##MS_LoginManager## 和 ##MS_ServerStateReader##。尤其是当用户有特定的安全要求,只需要访问某些“管理”区域而不能访问其他区域时,如果不创建自定义服务器角色或简单地为他们分配系统管理员权限以避免进一步的麻烦,根据最小权限原则分配权限可能很困难。
在 SQL Server 2022 中,通常为 sysadmin 和 serveradmin 等管理角色保留的权限可以划分为新的服务器角色和服务器角色的子集,以便用户和应用程序进程只能拥有所需的最少权限。
可恢复添加表约束
Ken D. 很高兴看到暂停/可恢复功能的附加功能变得可用和扩展。ALTER TABLE ADD CONSTRAINT 操作(目前仅限于 PRIMARY KEY 和 UNIQUE KEY 约束)现在具有“WITH RESUMABLE=ON”选项。
在非常大的表上,这些有时耗时且资源密集的操作现在可以暂停以允许进行其他维护活动,或者如果对正在运行的系统显示出负面影响,则可以从暂停点恢复。无需从头开始。
从中断点恢复执行的能力包括命令是否失败或是否发生系统故障转移。必须在第一次执行时指定“ONLINE = ON”选项和“RESUMABLE = ON”选项以使流程可恢复,因此需要提前计划可能是“计划外”的情况。
SQL Server 继续加强执行必要的 DBA 维护任务的能力,例如此和在线索引创建/重建,以保持系统性能良好并满足客户需求,同时减少对大型数据库可用性的影响。
数据虚拟化
Mike M. 对 SQL Server 2022 版本中增强的数据虚拟化可能带来的机会感到兴奋。有了这个,我们将能够查询数据集并解决数据/分析问题,而无需单独连接或导入各种表和对象来识别问题区域而增加开销。DBA 维护将减少到更少的环境,即使在处理各种源数据位置时,T-SQL 的使用也将变得更加高效和简化。将外部表作为选择包括在内是一个特别有趣的功能,我很高兴看到如何利用它来执行小型 ETL/ELT 操作以满足用户需求。
管理特点
Lina W. 对一些新的管理功能感到兴奋,这些功能将使整体数据库管理更加轻松和高效。例如,SQL 现在将在安装期间计算并推荐最大内存设置。这将消除以后更改这些设置的需要,许多人忘记或什至没有意识到需要设置这些设置,并将减少 SQL Server 上失控的内存增长。另一个令人兴奋的新管理功能涉及我们缩小数据文件和日志文件的方式。通过使用新选项 WAIT_AT_LOW_PRIORITY,收缩操作将不再阻塞新查询,因此您可以收缩并仍然执行正常的业务操作。
查询存储
Christina T. 期待查询存储的增强功能。在以前的 SQL Server 版本中,查询存储可用,但默认情况下处于禁用状态。此 SQL Server 2022 版本改进了查询存储的查询智能,并将其转变为现在默认启用的众多功能之一。其他改进支持查询存储在只读 AlwaysOn 副本上可用,以更好地优化辅助工作负载的性能。我们还可以使用查询存储提示来塑造查询计划,而无需对应用程序代码进行任何额外更改。
新的 T-SQL 函数
作为一名开发人员,Rebecca 期待一些现在可用的新 T-SQL 函数,例如 DATETRUNC()、GREATEST() 和 LEAST()。
新的 DATETRUNC() 函数使返回特定日期部分变得更加容易,而不必花时间记住如何操作日期。返回的数据类型是动态的,具体取决于所使用的日期类型。意思是,如果你给它一个 datetime2 的日期,返回的值也将是一个 datetime2。
GREATEST() 函数将从逗号分隔的表达式列表中返回最大值。这些表达式可以是不同参数的组合,例如变量、列名、函数(包括聚合函数)、标量子查询和常量。表达式可以包含不同的运算符,包括按位运算符、字符串运算符和算术运算符。如果您混合列出不同的可比较数据类型,它将使用具有最高优先级的数据类型返回一个值。如果您不熟悉数据类型优先级,可以在此处阅读更多相关信息。
有什么不能比较的?您无法使用超过 8000 字节的较大数据类型进行比较,例如 varchar(max)、nvarchar(max)、varbinary。但是,如果它们是 8000 字节或更少,您可以比较它们!您也不能将参数与 xml、text、ntext、image 等数据类型进行比较。
最后但并非最不重要的是 LEAST() 函数,它与 GREATEST() 函数类似,但从逗号分隔的表达式列表中返回最小值而不是最大值,并且也具有相同的约束。
Ledger
在数据完整性至关重要的时代,Josh 期待 Ledger 提供的额外保护。
Ledger 可以利用区块链技术向业务合作伙伴、审计员或其他需要了解您数据完整性的人提供您的数据未被篡改的证据。分类帐使用可更新分类帐表或仅附加分类帐表。
可更新的分类帐表允许您插入、更新和删除行,但每个更改都会在历史表中进行跟踪。Append-only 分类账表只允许插入。
无论使用哪种类型的表,Ledger 都会通过 Merkle 树数据结构使用 SHA-256 哈希来创建一个称为数据库摘要的块。它表示创建时数据库中所有 Ledger 表的状态,并存储在系统外部(最好是在防篡改存储中)。
虽然 Ledger 无法防止攻击,但它可以保证,如果数据被篡改,则在验证分类账表时会检测到。在验证过程中,Ledger 将报告检测到的所有不一致情况。
原文标题:SQL Server 2022 Release – What Are We Excited About?
原文作者: XTIVIA
原文链接:https://virtual-dba.com/blog/sql-server-2022-release-what-are-we-excited-about/




