SQL Server 2025如何高效解决写写阻塞问题?
摘要:SQL Server 2025中解决“写写阻塞”的利器 最近安装了SQL Server 2025的CTP 2.0 版本,做了一些测试 SQLServer 2025安装包获取 通过网盘分享的文件:SQLServer 2025-x64-ENU.
SQL Server 2025中解决“写写阻塞”的利器
最近安装了SQL Server 2025的CTP 2.0 版本,做了一些测试
SQLServer 2025安装包获取
通过网盘分享的文件:SQLServer 2025-x64-ENU.iso
链接: https://pan.baidu.com/s/1vs4QIwynJqzGlh0uVtBZWw?pwd=uyzn
提取码: uyzn
背景
在当今的应用场景中,可扩展性和并发性已成为核心需求,如何在保持数据一致性的同时提供高性能是一项复杂的挑战。SQL Server 2025 对数据库引擎进行了多项增强,以提升性能和可扩展性。
“Optimized Locking”—— 这个拥有奇妙名称的功能改变了 DML 语句获取锁的方式。该功能最初在 云上Azure SQL 中推出,如今已在 本地SQL Server 2025 中可用。
数据库引擎增强
SQL Server 2025 版本体现了对数据库引擎的重大投入。
在 Tempdb 系统数据库上默认启用加速数据库恢复(ADR)功能。涉及临时表、表变量或在 Tempdb 中创建的非临时表的事务可能会受到回滚和过度事务日志使用的负面影响。在 Tempdb 中启用 ADR 后,即使是影响 tempdb 对象的事务,也能实现事务日志的即时截断。
为 Linux 上的 SQL Server 在 tmpfs文件系统上启用Tempdb。
强化了 “可读辅助副本持久化统计信息” 功能,该功能最初在 SQL Server 2022 中引入,但默认处于禁用状态,需要启用跟踪标志 12606 才能使用。在 SQL Server2025 中,可读副本的查询存储默认启用。
优化锁定
优化锁定是 SQL Server 2025 引擎中的一项新功能。它旨在减少锁管理所用的内存、减少锁升级的发生,并提高数据库的并发性。
在深入了解优化锁定的工作原理之前,有必要先了解并发模型和锁定机制。
并发模型和锁模式
锁定是一种防止多个事务同时修改相同数据的机制,从而确保事务符合 ACID 属性。
当事务需要修改数据时,引擎会请求对目标数据加锁。只有当同一数据集上没有不兼容的锁时,该锁才能被授予,允许事务继续执行更新。
如果已存在其他锁,事务必须等待该锁释放后才能继续。锁定是数据库引擎根据所选隔离级别强制执行事务隔离的机制之一。 SQL Server 数据库引擎支持两种并发模型:
悲观并发模型
乐观并发模型
在悲观模型中,读事务获取的锁会阻塞尝试获取写锁的事务,反之亦然。在乐观模型中,读事务获取的锁不会阻塞写锁,但写锁之间仍然不兼容。
每个事务都指定一个隔离级别,该级别决定了它与其他事务的隔离程度。
在SQL Server里,对于悲观并发模型,有四个隔离级别:
未提交读
已提交读
可重复读
序列化
对于乐观并发模型,有两个隔离级别:
快照
已提交读快照
并非所有人都知道,已提交读快照并非一个独立的隔离级别,而是当启用 READ_COMMITTED_SNAPSHOT 选项时,对已提交读隔离级别的行为修改。
根据所选的隔离级别,数据库引擎会使用不同的锁模式锁定资源,这些锁模式决定了并发事务对这些资源的访问方式(或限制)。
背后的技术
优化锁定依赖于两项早已集成到数据库引擎中的技术。
第一项是SQL Server 2019推出的加速数据库恢复(ADR),它是启用优化锁定的必要前提。加速数据库恢复必须在数据库级别启用,它通过加快事务回滚操作和更高效地处理未提交的更改来改进事务恢复。
第二项技术是已提交读快照隔离(RCSI)。虽然并非严格要求,但启用 RCSI 可以充分发挥优化锁定的优势。
以下 T-SQL 代码开启加速数据库恢复、已提交读快照和优化锁定功能,并且检查当前的开启状态。
