mssql2005

关注公众号 jb51net

关闭
首页 > 数据库 > mssql2005 > SQL Server 2025数据库引擎

SQL Server 2025数据库引擎新特性汇总

作者:桦仔

SQL Server 2025引入多项新特性和改进,包括预览功能、扩展事件时间限制、优化的sp_executesql存储过程、列存储索引改进、变更跟踪优化、AlwaysOn可读辅助副本持久化统计信息、加速数据库恢复等,这篇文章介绍SQLServer2025数据库引擎新特性,感兴趣的朋友一起看看吧

预览功能(PREVIEW_FEATURES)

启用 PREVIEW_FEATURES 数据库作用域配置,以测试和探索向量索引等预览功能。此设置允许您即使在 SQL Server 正式发布后,仍可使用部分预览功能。 通过此配置启用的功能将在未来的累积更新中正式可用。一旦某个功能通过累积更新正式可用,该功能将不再需要 PREVIEW_FEATURES 配置。 这些功能仅供开发或测试使用,不建议在生产环境中使用。

USE HellasGateV2
GO
SELECT * FROM sys.database_scoped_configurations
WHERE [name] = 'PREVIEW_FEATURES'
GO
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO

扩展事件会话加入时间限制选项

CREATE EVENT SESSION [TimeBoundSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed
WITH (MAX_DURATION = 600, STARTUP_STATE = OFF); -- (例如 10分钟,单位秒)
ALTER EVENT SESSION [TimeBoundSession] ON SERVER
WITH (MAX_DURATION = 1200); -- 修改为20分钟
ALTER EVENT SESSION [TimeBoundSession] ON SERVER
WITH (MAX_DURATION = UNLIMITED);
ALTER EVENT SESSION [TimeBoundSession] ON SERVER STATE = STOP;

优化的 sp_executesql存储过程

概述(Overview)

启用后,sp_executesql 批处理会像存储过程一样编译 —— 仅一个会话进行编译,其他会话等待,减少冗余执行计划的生成。

首次编译后,其他会话会重用缓存的执行计划,而非自行编译,提升性能和缓存效率。

编译锁确保同一时间仅一个会话进行编译,防止相同批处理的并行编译。

为获得最佳效果,若启用了自动更新统计信息,还应启用ASYNC_STATS_UPDATE_WAIT_AT_LOW_PRIORITY,以避免长时间等待和排他锁。

ALTER DATABASE SCOPED CONFIGURATION SET OPTIMIZED_SP_EXECUTESQL = ON;

执行计划缓存(Plan Cache)

减少执行计划冗余(Reduced Plan Duplication) 相同的 sp_executesql 批处理(排除参数值)将仅编译一次并共享同一执行计划,最大程度减少执行计划缓存中的冗余条目。

后续执行将重用已编译的执行计划,这可提升性能并减少编译期间的 CPU 使用率。

同一时间仅一个会话编译批处理,其他会话等待或重用执行计划 —— 这避免了同一逻辑的多次同时编译。

通过避免同一执行计划的多个版本,缓存保持更整洁、更高效。

会话在首次执行期间可能短暂等待编译锁,但这通常被长期的缓存收益所抵消。

内存使用(Memory Usage)

启用OPTIMIZED_SP_EXECUTESQL可通过改进执行计划的处理方式,对 SQL Server 2025 的内存使用产生积极影响。

ZSTD 数据库备份压缩算法

BACKUP DATABASE [databasename]  ... WITH COMPRESSION (ALGORITHM = ZSTD) -- 备份语句,指定压缩算法为 ZSTD

使用以下语句将 ZSTD 设置为所有备份的默认压缩算法:

-- 压缩算法取值:0 = MS_XPRESS(默认),1 = 无,2 = XPRESS,3 = ZSTD
EXEC sp_configure 'backup compression algorithm', 3; -- 配置备份压缩算法为 ZSTD
RECONFIGURE; -- 使配置生效

内存优化(XTP)相关文件和文件组的移除

现在可通过删除所有内存优化文件和文件组,完全移除内存优化OLTP的相关表和数据文件—— 这在早期版本中无法实现。

SELECT *
FROM sys.dm_db_xtp_undeploy_status;

在移除数据文件之前,必须删除所有内存优化表、表类型和本机编译的存储过程。

使用 ALTER DATABASE ... REMOVE FILE 和 ALTER DATABASE ... REMOVE FILEGROUP来删除最后一个文件和文件组。

如果移除停滞,执行 CHECKPOINT 命令并监控 sys.dm_db_xtp_undeploy_status视图以跟踪进度并解决事务日志截断问题。

列存储索引的改进

通过保持非聚集列存储索引数据的排序状态,提升了实时运营分析HTAP场景中的查询性能。适用于对运营数据频繁执行分析查询的场景。SQL Server 2022已经提供了有序聚集列存储索引功能。

现在可在CREATE INDEXALTER INDEX语句的ORDER子句中使用ONLINE = ON。即使是有序列存储索引,也能在索引创建或重建期间实现停机时间最小化。

在联机创建有序聚集列存储索引时,SQL Server 现在使用TempDB数据库进行排序,而非内存排序。若MAXDOP = 1,索引生成的列段将完全有序且无重叠,提升查询性能(通过列段消除)。虽然可能因TempDB数据库 的I/O 增加从而增加构建时间,但在多数场景下收益超过成本。

列存储索引使用LOB页面,DBCC SHRINKDATABASEDBCC SHRINKFILE现在可移动列存储索引中的 LOB 数据页。这使得收缩操作在回收空间时更有效,此前版本中这一能力受限。

变更跟踪(change tracking)改进

为大型变更跟踪辅助表引入自适应浅度清理。

以增量步骤运行,减少资源使用并提升可扩展性。

在 SQL Server 2025 中,自适应浅度清理默认启用。

它取代了 SQL Server 2022 及更早版本中使用的旧深度清理方法。

若要禁用自适应浅度清理,请全局启用trace flag跟踪标志 8273。

清理基于由保留期和清理深度确定的安全点。

有助于避免大型表上的长时间阻塞操作。

减少清理期间的 CPU 和 I/O 峰值。

对于具有大型变更跟踪辅助表的环境更高效。

AlwaysOn可读辅助副本的持久化统计信息

可读辅助副本上创建的临时统计信息,现在会自动持久化到主副本

一旦持久化,这些统计信息会在所有副本间同步,从而提升查询性能和一致性。

与 SQL Server 2022(需要跟踪标志 12606)不同,该功能在 SQL Server 2025 中默认启用。 在 SQL Server 2025 中使用跟踪标志 12606 会禁用该功能

对TempDB数据库启用加速数据库恢复

现在可以对TempDB数据库启用加速数据库恢复功能

收益

重要性

在早期版本中,即使采用最小日志记录,TempDB 中长时间运行或失败的事务(例如涉及临时表或表变量的事务)也可能会导致:

示例代码

-- 启用 tempdb 的加速数据库恢复
ALTER DATABASE [tempdb]
SET ACCELERATED_DATABASE_RECOVERY = ON;
-- 验证 tempdb数据库是否启用了加速数据库恢复(ADR)
SELECT name,
       is_accelerated_database_recovery_on
FROM sys.databases
WHERE name = 'tempdb';

TempDB数据库空间资源治理

防止失控查询或工作负载消耗过多的 tempdb数据库空间。

通过实施每个工作负载的限制,帮助提高可靠性并避免中断。

可以按工作负载组设置 tempdb 空间限制,方式如下:

GROUP_MAX_TEMPDB_DATA_MB -- 以 MB 为单位的固定大小。
GROUP_MAX_TEMPDB_DATA_PERCENT -- 占 tempdb 总大小的百分比。
-- 若两者都设置,固定限制优先。

sys.resource_governor_workload_groups视图显示已配置的限制

sys.dm_resource_governor_workload_groups视图显示当前和峰值的 tempdb 使用率

扩展事件:tempdb_data_workload_group_limit_reached 当某个工作负载组超出其限制时触发

避免将限制设置得过低,尤其是默认工作负载组。

如果工作负载不太可能同时达到峰值,可在多个组之间超额配置限制(例如,总限制超过 tempdb 的 100%)。

预先设置好tempdb 数据文件大小和增长大小,并正确配置 MAXSIZE 和 FILEGROWTH,以使用基于百分比的限制。

仅适用于tempdb数据文件,不适用于事务日志文件。

版本存储的使用(例如,用于加速数据库恢复(ADR)的部分)不受治理。

空间按 8 KB 页跟踪,即使是部分使用的页也会被跟踪。

配置 tempdb 空间资源调控器

-- 启用资源调控器
ALTER RESOURCE GOVERNOR RECONFIGURE;
-- 创建资源池
CREATE RESOURCE POOL rg_tempdb_pool;
-- 创建带有 tempdb 空间限制(例如,500 MB)的工作负载组
CREATE WORKLOAD GROUP wg_tempdb_group
USING rg_tempdb_pool
WITH (GROUP_MAX_TEMPDB_DATA_MB = 500
  -- 或使用 GROUP_MAX_TEMPDB_DATA_PERCENT = 10
);
-- 重新配置资源调控器
ALTER RESOURCE GOVERNOR RECONFIGURE;

监控 tempdb 使用率

-- 监控 tempdb 使用情况
-- 按工作负载组查看当前 tempdb 使用情况
SELECT
    wg.name AS 工作负载组,
    wg.group_id,
    wg_stats.total_allocated_tempdb_kb / 1024.0 AS 已使用TempDB_MB,
    wg_stats.max_allocated_tempdb_kb / 1024.0 AS TempDB_MB_峰值
FROM sys.dm_resource_governor_workload_groups AS wg_stats
JOIN sys.resource_governor_workload_groups AS wg
ON wg_stats.group_id = wg.group_id;

使用扩展事件监控限制违规

-- 使用扩展事件监控限制违规
CREATE EVENT SESSION [TempDBLimitMonitor] ON SERVER
ADD EVENT sqlserver.tempdb_data_workload_group_limit_reached
ADD TARGET package0.event_file
(
    SET filename = N'TempDBLimitMonitor.xel',
        max_file_size = 10,
        max_rollover_files = 5
)
WITH (STARTUP_STATE = ON);
GO

优化锁定

什么是优化锁定

核心组成

功能可用

平台可用默认启用
SQL Server 2025 (17.x)✔️
Azure SQL 数据库✔️✔️
Microsoft Fabric 中的 SQL 数据库✔️✔️
Azure SQL 托管实例(AUTD)✔️✔️
SQL Server 2022 及更早版本

启用优化锁定

示例代码

ALTER DATABASE [YourDatabaseName] SET OPTIMIZED_LOCKING = ON;

前提条件

ALTER DATABASE [你的数据库名] SET READ_COMMITTED_SNAPSHOT ON;

监控

开启了优化锁定之后,使用下面手段监控锁的情况

到此这篇关于SQL Server 2025数据库引擎新特性汇总的文章就介绍到这了,更多相关SQL Server 2025数据库引擎内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文