SQL?Server?2025數(shù)據(jù)庫引擎新特性匯總
預(yù)覽功能(PREVIEW_FEATURES)
啟用 PREVIEW_FEATURES 數(shù)據(jù)庫作用域配置,以測試和探索向量索引等預(yù)覽功能。此設(shè)置允許您即使在 SQL Server 正式發(fā)布后,仍可使用部分預(yù)覽功能。 通過此配置啟用的功能將在未來的累積更新中正式可用。一旦某個(gè)功能通過累積更新正式可用,該功能將不再需要 PREVIEW_FEATURES 配置。 這些功能僅供開發(fā)或測試使用,不建議在生產(chǎn)環(huán)境中使用。
USE HellasGateV2 GO SELECT * FROM sys.database_scoped_configurations WHERE [name] = 'PREVIEW_FEATURES' GO ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES = ON; GO
擴(kuò)展事件會(huì)話加入時(shí)間限制選項(xiàng)
- 說明
- 帶 MAX_DURATION 的自動(dòng)停止 現(xiàn)在可以在創(chuàng)建或修改事件會(huì)話時(shí)指定 MAX_DURATION(以秒為單位),使其在設(shè)定時(shí)間后自動(dòng)停止擴(kuò)展事件會(huì)話。
- 資源管理 這有助于防止會(huì)話無限運(yùn)行,避免消耗資源并生成過多診斷數(shù)據(jù)。
- 手動(dòng)控制仍可用 可以隨時(shí)使用
ALTER EVENT SESSION ... STATE = STOP手動(dòng)停止擴(kuò)展事件會(huì)話。 - 靈活修改 可以使用
ALTER EVENT SESSION更改或移除擴(kuò)展事件會(huì)話的時(shí)間限制,但會(huì)話必須先停止擴(kuò)展事件會(huì)話。 - 系統(tǒng)視圖支持
sys.server_event_sessions視圖包含max_duration列,顯示擴(kuò)展事件會(huì)話的持續(xù)時(shí)間(0 表示無限制)。
- 示例
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;
優(yōu)化的 sp_executesql存儲(chǔ)過程
概述(Overview)
- 串行編譯(Serialized Compilation)
啟用后,sp_executesql 批處理會(huì)像存儲(chǔ)過程一樣編譯 —— 僅一個(gè)會(huì)話進(jìn)行編譯,其他會(huì)話等待,減少冗余執(zhí)行計(jì)劃的生成。
- 執(zhí)行計(jì)劃重用(Plan Reuse)
首次編譯后,其他會(huì)話會(huì)重用緩存的執(zhí)行計(jì)劃,而非自行編譯,提升性能和緩存效率。
- 編譯鎖機(jī)制(Compile Lock Mechanism)
編譯鎖確保同一時(shí)間僅一個(gè)會(huì)話進(jìn)行編譯,防止相同批處理的并行編譯。
- 推薦設(shè)置(Recommended Settings)
為獲得最佳效果,若啟用了自動(dòng)更新統(tǒng)計(jì)信息,還應(yīng)啟用ASYNC_STATS_UPDATE_WAIT_AT_LOW_PRIORITY,以避免長時(shí)間等待和排他鎖。
- 使用 T-SQL 啟用(Enable with T-SQL)
ALTER DATABASE SCOPED CONFIGURATION SET OPTIMIZED_SP_EXECUTESQL = ON;
執(zhí)行計(jì)劃緩存(Plan Cache)
- 啟用OPTIMIZED_SP_EXECUTESQL可對(duì) SQL Server 2025 的執(zhí)行計(jì)劃緩存產(chǎn)生積極影響。
減少執(zhí)行計(jì)劃冗余(Reduced Plan Duplication) 相同的 sp_executesql 批處理(排除參數(shù)值)將僅編譯一次并共享同一執(zhí)行計(jì)劃,最大程度減少執(zhí)行計(jì)劃緩存中的冗余條目。
- 提升執(zhí)行計(jì)劃重用率(Improved Plan Reuse)
后續(xù)執(zhí)行將重用已編譯的執(zhí)行計(jì)劃,這可提升性能并減少編譯期間的 CPU 使用率。
- 串行編譯(Serialized Compilation)
同一時(shí)間僅一個(gè)會(huì)話編譯批處理,其他會(huì)話等待或重用執(zhí)行計(jì)劃 —— 這避免了同一邏輯的多次同時(shí)編譯。
- 降低緩存碎片(Lower Cache Fragmentation)
通過避免同一執(zhí)行計(jì)劃的多個(gè)版本,緩存保持更整潔、更高效。
- 首次編譯期間的潛在等待(Potential Waits During First Compilation)
會(huì)話在首次執(zhí)行期間可能短暫等待編譯鎖,但這通常被長期的緩存收益所抵消。
內(nèi)存使用(Memory Usage)
啟用OPTIMIZED_SP_EXECUTESQL可通過改進(jìn)執(zhí)行計(jì)劃的處理方式,對(duì) SQL Server 2025 的內(nèi)存使用產(chǎn)生積極影響。
- 內(nèi)存使用優(yōu)勢如下
- 更少的冗余執(zhí)行計(jì)劃(Fewer Duplicate Plans)
- 更整潔的執(zhí)行計(jì)劃緩存(Cleaner Plan Cache)
- 更低的編譯開銷(Lower Compilation Overhead)
- 潛在注意問題
- 初始編譯鎖等待(Initial Compile Lock Waits)
- 執(zhí)行計(jì)劃緩存壓力降低(Plan Cache Pressure Reduction)
ZSTD 數(shù)據(jù)庫備份壓縮算法
- 更快而且更高效
- 與舊的 '
MS_XPRESS' 算法相比,ZSTD 提供了更優(yōu)的速度和壓縮比。 - 執(zhí)行備份時(shí)使用指定的壓縮算法
- 與舊的 '
BACKUP DATABASE [databasename] ... WITH COMPRESSION (ALGORITHM = ZSTD) -- 備份語句,指定壓縮算法為 ZSTD
- 服務(wù)器范圍的默認(rèn)設(shè)置
使用以下語句將 ZSTD 設(shè)置為所有備份的默認(rèn)壓縮算法:
-- 壓縮算法取值:0 = MS_XPRESS(默認(rèn)),1 = 無,2 = XPRESS,3 = ZSTD EXEC sp_configure 'backup compression algorithm', 3; -- 配置備份壓縮算法為 ZSTD RECONFIGURE; -- 使配置生效
內(nèi)存優(yōu)化(XTP)相關(guān)文件和文件組的移除
現(xiàn)在可通過刪除所有內(nèi)存優(yōu)化文件和文件組,完全移除內(nèi)存優(yōu)化OLTP的相關(guān)表和數(shù)據(jù)文件—— 這在早期版本中無法實(shí)現(xiàn)。
- 驗(yàn)證步驟
- 使用
sys.dm_db_xtp_undeploy_status檢查是否使用了內(nèi)存優(yōu)化表(deployment_state = 1 或 2)。
SELECT * FROM sys.dm_db_xtp_undeploy_status;
- 刪除所有內(nèi)存優(yōu)化表相關(guān)對(duì)象
在移除數(shù)據(jù)文件之前,必須刪除所有內(nèi)存優(yōu)化表、表類型和本機(jī)編譯的存儲(chǔ)過程。
- 移除文件和文件組
使用 ALTER DATABASE ... REMOVE FILE 和 ALTER DATABASE ... REMOVE FILEGROUP來刪除最后一個(gè)文件和文件組。
- 長時(shí)間運(yùn)行的移除過程
如果移除停滯,執(zhí)行 CHECKPOINT 命令并監(jiān)控 sys.dm_db_xtp_undeploy_status視圖以跟蹤進(jìn)度并解決事務(wù)日志截?cái)鄦栴}。
列存儲(chǔ)索引的改進(jìn)
- 有序非聚集列存儲(chǔ)索引
通過保持非聚集列存儲(chǔ)索引數(shù)據(jù)的排序狀態(tài),提升了實(shí)時(shí)運(yùn)營分析HTAP場景中的查詢性能。適用于對(duì)運(yùn)營數(shù)據(jù)頻繁執(zhí)行分析查詢的場景。SQL Server 2022已經(jīng)提供了有序聚集列存儲(chǔ)索引功能。
- 有序列存儲(chǔ)索引的聯(lián)機(jī)創(chuàng)建 / 重建
現(xiàn)在可在CREATE INDEX或ALTER INDEX語句的ORDER子句中使用ONLINE = ON。即使是有序列存儲(chǔ)索引,也能在索引創(chuàng)建或重建期間實(shí)現(xiàn)停機(jī)時(shí)間最小化。
- 有序聚集列存儲(chǔ)索引的排序質(zhì)量改進(jìn)
在聯(lián)機(jī)創(chuàng)建有序聚集列存儲(chǔ)索引時(shí),SQL Server 現(xiàn)在使用TempDB數(shù)據(jù)庫進(jìn)行排序,而非內(nèi)存排序。若MAXDOP = 1,索引生成的列段將完全有序且無重疊,提升查詢性能(通過列段消除)。雖然可能因TempDB數(shù)據(jù)庫 的I/O 增加從而增加構(gòu)建時(shí)間,但在多數(shù)場景下收益超過成本。
- 收縮LOB頁面的改進(jìn)
列存儲(chǔ)索引使用LOB頁面,DBCC SHRINKDATABASE和DBCC SHRINKFILE現(xiàn)在可移動(dòng)列存儲(chǔ)索引中的 LOB 數(shù)據(jù)頁。這使得收縮操作在回收空間時(shí)更有效,此前版本中這一能力受限。
變更跟蹤(change tracking)改進(jìn)
- 新清理策略
為大型變更跟蹤輔助表引入自適應(yīng)淺度清理。
以增量步驟運(yùn)行,減少資源使用并提升可擴(kuò)展性。
- 默認(rèn)啟用
在 SQL Server 2025 中,自適應(yīng)淺度清理默認(rèn)啟用。
它取代了 SQL Server 2022 及更早版本中使用的舊深度清理方法。
若要禁用自適應(yīng)淺度清理,請(qǐng)全局啟用trace flag跟蹤標(biāo)志 8273。
- 安全清理點(diǎn)
清理基于由保留期和清理深度確定的安全點(diǎn)。
有助于避免大型表上的長時(shí)間阻塞操作。
- 收益
減少清理期間的 CPU 和 I/O 峰值。
對(duì)于具有大型變更跟蹤輔助表的環(huán)境更高效。
AlwaysOn可讀輔助副本的持久化統(tǒng)計(jì)信息
- 自動(dòng)統(tǒng)計(jì)信息持久化
可讀輔助副本上創(chuàng)建的臨時(shí)統(tǒng)計(jì)信息,現(xiàn)在會(huì)自動(dòng)持久化到主副本。
一旦持久化,這些統(tǒng)計(jì)信息會(huì)在所有副本間同步,從而提升查詢性能和一致性。
- 無需跟蹤標(biāo)志
與 SQL Server 2022(需要跟蹤標(biāo)志 12606)不同,該功能在 SQL Server 2025 中默認(rèn)啟用。 在 SQL Server 2025 中使用跟蹤標(biāo)志 12606 會(huì)禁用該功能。
- sys.stats 視圖中的新字段
replica_role_id指示副本角色(1 = 主副本,2 = 輔助副本,依此類推)。replica_role_desc描述副本角色。replica_name創(chuàng)建統(tǒng)計(jì)信息的副本名稱。
- 功能亮點(diǎn)
- 即使完成持久化,臨時(shí)統(tǒng)計(jì)信息仍會(huì)保留在輔助副本上。
- 優(yōu)化器會(huì)使用最佳可用的統(tǒng)計(jì)信息,無論其來源。
- 輔助副本仍可基于自身的數(shù)據(jù)視圖刷新過期統(tǒng)計(jì)信息。
- 監(jiān)控與故障排除
- 使用擴(kuò)展事件(
persisted_stats_operation)監(jiān)控持久化操作。 - 常見錯(cuò)誤消息包括:
- 9131:功能已禁用
- 9136:表/索引已刪除
- 9139:統(tǒng)計(jì)信息過大無法發(fā)送
對(duì)TempDB數(shù)據(jù)庫啟用加速數(shù)據(jù)庫恢復(fù)
現(xiàn)在可以對(duì)TempDB數(shù)據(jù)庫啟用加速數(shù)據(jù)庫恢復(fù)功能
收益
- 事務(wù)即時(shí)回滾
- 主動(dòng)事務(wù)日志截?cái)?/li>
- 有助于防止長時(shí)間事務(wù)回滾和 TempDB 事務(wù)日志空間耗盡(這類情況可能導(dǎo)致數(shù)據(jù)庫停機(jī))
重要性
在早期版本中,即使采用最小日志記錄,TempDB 中長時(shí)間運(yùn)行或失敗的事務(wù)(例如涉及臨時(shí)表或表變量的事務(wù))也可能會(huì)導(dǎo)致:
- 事務(wù)日志高使用率
- 事務(wù)回滾延遲
- 應(yīng)用程序中斷
示例代碼
-- 啟用 tempdb 的加速數(shù)據(jù)庫恢復(fù)
ALTER DATABASE [tempdb]
SET ACCELERATED_DATABASE_RECOVERY = ON;
-- 驗(yàn)證 tempdb數(shù)據(jù)庫是否啟用了加速數(shù)據(jù)庫恢復(fù)(ADR)
SELECT name,
is_accelerated_database_recovery_on
FROM sys.databases
WHERE name = 'tempdb';TempDB數(shù)據(jù)庫空間資源治理
- 背景
防止失控查詢或工作負(fù)載消耗過多的 tempdb數(shù)據(jù)庫空間。
通過實(shí)施每個(gè)工作負(fù)載的限制,幫助提高可靠性并避免中斷。
- 設(shè)置方式
可以按工作負(fù)載組設(shè)置 tempdb 空間限制,方式如下:
GROUP_MAX_TEMPDB_DATA_MB -- 以 MB 為單位的固定大小。 GROUP_MAX_TEMPDB_DATA_PERCENT -- 占 tempdb 總大小的百分比。 -- 若兩者都設(shè)置,固定限制優(yōu)先。
- 監(jiān)控資源使用
sys.resource_governor_workload_groups視圖顯示已配置的限制
sys.dm_resource_governor_workload_groups視圖顯示當(dāng)前和峰值的 tempdb 使用率
擴(kuò)展事件:tempdb_data_workload_group_limit_reached 當(dāng)某個(gè)工作負(fù)載組超出其限制時(shí)觸發(fā)
- 最佳實(shí)踐
避免將限制設(shè)置得過低,尤其是默認(rèn)工作負(fù)載組。
如果工作負(fù)載不太可能同時(shí)達(dá)到峰值,可在多個(gè)組之間超額配置限制(例如,總限制超過 tempdb 的 100%)。
預(yù)先設(shè)置好tempdb 數(shù)據(jù)文件大小和增長大小,并正確配置 MAXSIZE 和 FILEGROWTH,以使用基于百分比的限制。
- 限制
僅適用于tempdb數(shù)據(jù)文件,不適用于事務(wù)日志文件。
版本存儲(chǔ)的使用(例如,用于加速數(shù)據(jù)庫恢復(fù)(ADR)的部分)不受治理。
空間按 8 KB 頁跟蹤,即使是部分使用的頁也會(huì)被跟蹤。
- 示例代碼
配置 tempdb 空間資源調(diào)控器
-- 啟用資源調(diào)控器 ALTER RESOURCE GOVERNOR RECONFIGURE; -- 創(chuàng)建資源池 CREATE RESOURCE POOL rg_tempdb_pool; -- 創(chuàng)建帶有 tempdb 空間限制(例如,500 MB)的工作負(fù)載組 CREATE WORKLOAD GROUP wg_tempdb_group USING rg_tempdb_pool WITH (GROUP_MAX_TEMPDB_DATA_MB = 500 -- 或使用 GROUP_MAX_TEMPDB_DATA_PERCENT = 10 ); -- 重新配置資源調(diào)控器 ALTER RESOURCE GOVERNOR RECONFIGURE;
監(jiān)控 tempdb 使用率
-- 監(jiān)控 tempdb 使用情況
-- 按工作負(fù)載組查看當(dāng)前 tempdb 使用情況
SELECT
wg.name AS 工作負(fù)載組,
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;使用擴(kuò)展事件監(jiān)控限制違規(guī)
-- 使用擴(kuò)展事件監(jiān)控限制違規(guī)
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優(yōu)化鎖定
什么是優(yōu)化鎖定
- 一種新的鎖定機(jī)制,可減少鎖內(nèi)存使用、最小化阻塞并避免鎖升級(jí)。
- 旨在為高吞吐量事務(wù)工作負(fù)載提升并發(fā)性和性能。
核心組成
- 事務(wù)ID鎖
- 每一行的最后存儲(chǔ)修改它的
事務(wù)ID。 - 不再持有大量行/頁鎖,而是持有一個(gè)單獨(dú)的
TID鎖,直到事務(wù)結(jié)束。 - 行/頁鎖在修改后立即釋放。
- 限定后鎖定
- 使用最新提交的行版本評(píng)估謂詞,而不獲取鎖。
- 僅在某行符合修改條件后才獲取鎖。
- 減少阻塞并提升并發(fā)性。
功能可用
| 平臺(tái) | 可用 | 默認(rèn)啟用 |
|---|---|---|
| SQL Server 2025 (17.x) | ?? | ? |
| Azure SQL 數(shù)據(jù)庫 | ?? | ?? |
| Microsoft Fabric 中的 SQL 數(shù)據(jù)庫 | ?? | ?? |
| Azure SQL 托管實(shí)例(AUTD) | ?? | ?? |
| SQL Server 2022 及更早版本 | ? | ? |
啟用優(yōu)化鎖定
示例代碼
ALTER DATABASE [YourDatabaseName] SET OPTIMIZED_LOCKING = ON;
前提條件
- 數(shù)據(jù)庫必須已經(jīng)啟用了加速數(shù)據(jù)庫恢復(fù)(ADR)。
- 為了充分獲得限定后鎖定(LAQ)的優(yōu)勢,數(shù)據(jù)庫應(yīng)打開讀已提交快照(RCSI)隔離級(jí)別
ALTER DATABASE [你的數(shù)據(jù)庫名] SET READ_COMMITTED_SNAPSHOT ON;
監(jiān)控
開啟了優(yōu)化鎖定之后,使用下面手段監(jiān)控鎖的情況
- 使用
sys.dm_tran_locks視圖觀察鎖行為。 - 新增的等待類型:
LCK_M_S_XACT_READ、LCK_M_S_XACT_MODIFY。 - 擴(kuò)展事件
lock_after_qual_stmt_abort當(dāng) LAQ(限定后鎖定)被中止并重試時(shí)觸發(fā)。 - 擴(kuò)展事件
locking_stats鎖使用情況和 LAQ/TID 活動(dòng)的定期匯總。
到此這篇關(guān)于SQL Server 2025數(shù)據(jù)庫引擎新特性匯總的文章就介紹到這了,更多相關(guān)SQL Server 2025數(shù)據(jù)庫引擎內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SqlServer 2005 T-SQL Query 學(xué)習(xí)筆記(3)
利用ROW_NUMBER()進(jìn)行高效率的分頁。2010-02-02
SQL2005學(xué)習(xí)筆記 APPLY 運(yùn)算符
APPLY 運(yùn)算符簡介: APPLY 運(yùn)算符是Sql Server2005新增加的運(yùn)算符。2009-07-07
SQL Server 在Management Studio中使用Web瀏覽器
本文只是分享一個(gè)使用Management Studio的技巧,需要的朋友可以參考一下。2016-05-05
使用SQLSERVER 2005/2008 遞歸CTE查詢樹型結(jié)構(gòu)的方法
我們經(jīng)常遇到樹型結(jié)構(gòu),把它們顯示在一個(gè)類似TreeView控件上的情況。這時(shí)我們可以使用Recursive Common Table Expressions(CTE)實(shí)現(xiàn)2011-10-10
SQL Server Management Studio Express管理器 沒有導(dǎo)入導(dǎo)出數(shù)據(jù)的向?qū)У慕鉀Q方法
我的SQL2005 Microsoft SQL Server Management Studio Express管理器里,右鍵單擊一個(gè)數(shù)據(jù)庫,指向“任務(wù)”,再單擊“導(dǎo)入數(shù)據(jù)”或“導(dǎo)出數(shù)據(jù)”中沒有這個(gè)選項(xiàng),要想實(shí)現(xiàn)導(dǎo)入/導(dǎo)出數(shù)據(jù),要怎么辦呢?2011-04-04
在sqlserver2005中安裝sql server 2000的示例數(shù)據(jù)庫northwind的方法
裝完sql server 2005后卻沒有找到ms的示例數(shù)據(jù)庫northwind 后來查看安裝光盤發(fā)現(xiàn)sql server 2005種只有adventurework與adventureworkDW這兩個(gè)sample database 到ms官方站找了好久 才找到sql server 2000的sample database2013-05-05
sql server 關(guān)于設(shè)置null的一些建議
我們在設(shè)計(jì)數(shù)據(jù)庫表的時(shí)候,總有些疑惑,到底是允許為NULL還是不允許為NULL,本文幫大家解除這個(gè)疑惑。2016-05-05
SQLServer2005 XML數(shù)據(jù)操作代碼
在項(xiàng)目中經(jīng)常用XML文件,看看T-SQL程序設(shè)計(jì)發(fā)現(xiàn)SQLSERVER2005居然可以處理XML類型,而且還可以使用類似于Xpath的查詢語法查詢。2010-06-06

