SQL Server 2014新功能 -- 延迟事务持久性(Delayed Transaction Durability)

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
日志服务 SLS,月写入数据量 50GB 1个月
简介:

SQL Server事务提交默认是完全持久性的(Full Durable),从SQL Server 2014开始,增加了新的功能延迟事务持久性,使得事务提交可设置为延时持久性的(Delayed Durable,也叫做(Lazy Commit))。

 

完全事务持久性(Full Transaction Durability)

 

在SQL Server 2014之前, SQL Server提交事务是一个同步的过程,也就是说,只有当SQL Server将该事务相对应的日志记录写入到了磁盘文件之后,才会返回事务提交成功的信号。这也是为了体现事务4个基本特性中的持久性而实现的功能。只有这样,我们才能保证当SQL Server因为某些原因突然Crash之后,再重启的时候,那些已经提交但还没有写入到数据文件上的记录可以通过日志文件进行恢复,或者那些还没有提交,但已经有部分数据写入到数据文件上的记录进行回滚。所以,我们可以看到,对于传统的事务提交,由于必须要保证日志写入到磁盘上,这个I/O操作就有可能成为性能的瓶颈。

 

应用场景

 

完全持久事务在将控制权归还给客户端之前把事务日志强制写入磁盘。 只要存在以下情况,就应使用完全持久事务:

1.系统无法承受任何数据丢失。

2.造成瓶颈的原因不是事务日志写入延迟。

通过在内存中保留事务日志记录并批量写入事务日志,延迟事务持续性可以缩短延迟,因而减少了所需的 I/O 操作。 延迟事务持续性可能会减少日志 I/O 争用,从而减少系统中的等待。

 

延迟事务持久性(Delayed Transaction Durability)

 

这个技术可以使得SQL Server在提交事务时,无需等待事务日志写入磁盘就直接返回事务提交成功的信号,I/O操作在后台会以异步的方式写入到数据库事务日志文件中。这样好处是,事务可以去除等待I/O操作完成所带来的延时,以此来提高整个SQL Server的性能。在这整个过程中,SQL Server会在内存中专门开辟出一个特殊的Log Buffer来存放DTD所产生的日志,当这个Log Buffer一旦存满之后会马上写入日志文件,由此将零散的I/O操作变成了一块一块的操作来提高效率,增加吞吐量。

 

应用场景

 

适合使用延迟事务持续性的部分情况如下:

1.可以容忍一定的数据丢失。

    如果可以容忍一定的数据丢失,例如只要有大部分数据即可,个别记录不是非常重要,就值得考虑延迟持续性。 如果无法容忍任何数据丢失,则不要使用延迟事务持续性。

2.在事务日志写入时遭遇瓶颈。

    如果性能问题是由于事务日志写入延迟造成的,则应用程序可能适合使用延迟事务持续性。

3.工作负载有很高的争用率。

    如果系统工作负载争用级别很高,则会花费大量时间等待锁释放。 延迟事务持续性会缩短提交时间,因此能够更快地释放锁,从而实现更大的吞吐量。

 

控制事务持久性

 

持久性可以在数据库级别(Database Level)、提交级别(COMMIT Level)或原子块级别(ATOMIC Block Level)进行控制。

 

数据库级别控制

 

您作为 DBA,可以控制用户是否可通过以下语句对数据库使用延迟事务持续性。 您必须使用 ALTER DATABASE 来设置延迟持续性设置。

 

1
ALTER  DATABASE  …  SET  DELAYED_DURABILITY = { DISABLED | ALLOWED | FORCED }

 

原子块级别控制 - 本机编译的存储过程

 

下面的代码面向原子块内部。

 

1
DELAYED_DURABILITY = {  OFF  ON  }

 

提交级别控制 – T-SQL

 

COMMIT 语法已扩展,您可以强制实施延迟事务持续性。 如果 DELAYED_DURABILITY 在数据库级别设置为 DISABLED 或 FORCED,则忽略此 COMMIT 选项。

 

如何强制执行事务日志刷新

 

有两种方法可以强制将事务日志刷新到磁盘。

1.执行任何可改变相应数据库的完全持久事务。 这会强制将之前提交的所有延迟持续性事务的日志记录刷新到磁盘。

2.执行系统存储过程 sp_flush_log。 此过程会强制将之前提交的所有延迟持久事务的日志记录刷新到磁盘。

 

sys.sp_flush_log

 

将当前数据库的事务日志刷新至磁盘,从而强制将所有之前已提交的延迟持久事务的日志记录刷新到磁盘。

 

如果您出于性能优势原因而选择使用延迟事务持续性,但还想对在服务器崩溃或故障转移时丢失的数据量进行有保证的限制,请定期执行 sys.sp_flush_log。 例如,如果您想确保不丢失多于 x 秒的数据,则您需要每隔 x 秒执行一次 sp_flush_log。

 

执行 sys.sp_flush_log 可保证所有之前提交的延迟持久事务都是持久的。

 

1
EXECUTE  sys.sp_flush_log
















本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1631861  ,如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
5月前
|
SQL 数据库 数据安全/隐私保护
SQL Server数据库Owner导致事务复制log reader job无法启动的解决办法
【8月更文挑战第14天】解决SQL Server事务复制Log Reader作业因数据库所有者问题无法启动的方法:首先验证数据库所有者是否有效并具足够权限;若非,使用`ALTER AUTHORIZATION`更改为有效登录名。其次,确认Log Reader使用的登录名拥有读取事务日志所需的角色权限。还需检查复制配置是否准确无误,并验证Log Reader代理的连接信息及参数。重启SQL Server Agent服务或手动启动Log Reader作业亦可能解决问题。最后,审查SQL Server错误日志及Windows事件查看器以获取更多线索。
|
2月前
|
SQL Oracle 关系型数据库
[SQL]事务
本文介绍了事务处理的基本概念,包括事务的四大特性(原子性、一致性、隔离性、持久性)及生命周期。文章还详细解释了事务的保存点、四种事务隔离级别及其异常读现象,并提供了设置事务隔离级别的方法。最后,作者建议读者深入学习相关理论以更好地理解事务隔离级别。
62 0
|
4月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
4月前
|
SQL 存储 监控
SQLServer事务复制延迟优化之并行(多线程)复制
【9月更文挑战第12天】在SQL Server中,事务复制延迟会影响数据同步性。并行复制可通过多线程处理优化这一问题,提高复制效率。主要优化方法包括:配置分发代理参数、优化网络带宽、调整系统资源、优化数据库设计及定期监控维护。合理实施这些措施可提升数据同步的及时性和可靠性。
142 0
|
4月前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
227 0
|
6月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
86 6
|
5月前
|
SQL 监控 供应链
|
5月前
|
SQL 数据库连接 网络安全
SQLServer非默认端口下事务复制代理作业服务无法启动的处理
【8月更文挑战第14天】若SQL Server非默认端口下的事务复制代理作业无法启动,可按以下步骤解决:1) 确认服务器连接字符串正确无误,包括非默认端口号;2) 检查防火墙设置,确保允许非默认端口的连接;3) 核实SQL Server配置已启用非默认端口;4) 查阅代理作业日志寻找错误详情;5) 重启SQL Server与Agent服务;6) 使用工具测试非默认端口的连接性。如问题持续,请寻求专业支持。
|
5月前
|
SQL 安全 Java
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
581 0
|
5月前
|
SQL 关系型数据库 MySQL
SQL Server 事务执行、回滚
SQL Server 事务执行、回滚
56 0