SQLServer 2014 控制事务持续性(Control Transaction Durability)
2016-11-15 21:38
246 查看
在SQL Server 2014之前, SQL Server提交事务是一个同步的过程,也就是说,只有当SQL Server将该事务相对应的日志记录写入到了磁盘文件之后,才会返回事务提交成功的信号。延迟持久事务提交是异步的,无需等待事务日志写入磁盘就直接返回事务提交成功的信号,I/O操作在后台会以异步的方式写入到数据库事务日志文件中。
数据丢失不能容忍,只要存在以下情况,就应使用完全持久事务:
》系统无法承受任何数据丢失。
》造成瓶颈的原因不是事务日志写入延迟
延迟事务持续性可能会减少系统中的延迟和争用,因为:
》 事务提交处理不会等待日志 IO 完成就将控制权归还给客户端。
》 并发事务争用日志 IO 的可能性更小;日志缓冲区现在可以更大的区块刷新到磁盘,从而减少争用和提高吞吐量。
适合使用延迟事务持续性的部分情况如下:
》 可以容忍一定的数据丢失。
》 在事务日志写入时遭遇瓶颈。
》 工作负载有很高的争用率。
事务持续性只能通过将内存中事务日志刷新到磁盘来保证。 内存中事务日志在以下情况下刷新到磁盘:
》 同一个数据库中完全持久的事务在数据库中做出更改并成功提交。
》 用户成功执行系统存储过程 sp_flush_log。
》 内存中事务日志缓冲区填充并自动刷新到磁盘。
事务的持久性有3个地方设置:
在数据库级别设置 DELAYED_DURABILITY = { DISABLED | FORCED } 是全局的,完全覆盖 原子块级别 和 提交级别 的设置。
在数据库级别设置 DELAYED_DURABILITY = ALLOWED ,原子块级别 和 提交级别 的持久性由 DELAYED_DURABILITY = { OFF | ON }控制。
注意:对于高可用,大部分都是读取事务日志的,所以有些延迟事务不包括。如 AlwaysOn 可用性组和镜像 ,故障转移群集,事务复制,日志传送,日志备份。对于延迟的持久性,SQL Server 的意外关闭和预期关闭/重新启动没有区别。更多参考 控制事务持续性
数据丢失不能容忍,只要存在以下情况,就应使用完全持久事务:
》系统无法承受任何数据丢失。
》造成瓶颈的原因不是事务日志写入延迟
延迟事务持续性可能会减少系统中的延迟和争用,因为:
》 事务提交处理不会等待日志 IO 完成就将控制权归还给客户端。
》 并发事务争用日志 IO 的可能性更小;日志缓冲区现在可以更大的区块刷新到磁盘,从而减少争用和提高吞吐量。
适合使用延迟事务持续性的部分情况如下:
》 可以容忍一定的数据丢失。
》 在事务日志写入时遭遇瓶颈。
》 工作负载有很高的争用率。
事务持续性只能通过将内存中事务日志刷新到磁盘来保证。 内存中事务日志在以下情况下刷新到磁盘:
》 同一个数据库中完全持久的事务在数据库中做出更改并成功提交。
》 用户成功执行系统存储过程 sp_flush_log。
》 内存中事务日志缓冲区填充并自动刷新到磁盘。
事务的持久性有3个地方设置:
1. 在数据库级别设置(右键数据库>> 属性>> 选项 >> 延迟持久性) ALTER DATABASE <Database> SET DELAYED_DURABILITY = { DISABLED | ALLOWED | FORCED } 2. 原子块级别控制 - 本机编译存储流程 DELAYED_DURABILITY = { OFF | ON } 3. 提交级别控制 –Transact-SQL COMMIT [ { TRAN | TRANSACTION } ] [ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]
在数据库级别设置 DELAYED_DURABILITY = { DISABLED | FORCED } 是全局的,完全覆盖 原子块级别 和 提交级别 的设置。
在数据库级别设置 DELAYED_DURABILITY = ALLOWED ,原子块级别 和 提交级别 的持久性由 DELAYED_DURABILITY = { OFF | ON }控制。
-- ALTER DATABASE [DemoDB] SET DELAYED_DURABILITY = { DISABLED | ALLOWED | FORCED } DISABLED :[默认] 使用此设置时,数据库提交的所有事务都是完全持久事务。 ALLOWED : 使用此设置时,每个事务的持续性都在事务级别确定 DELAYED_DURABILITY = { OFF | ON }。 FORCED : 使用此设置,对数据库提交的每个事务都是延迟持久事务。 -- DELAYED_DURABILITY = { OFF | ON } OFF :[默认] 事务是完全持久事务 ON : 事务是延迟持久事务
注意:对于高可用,大部分都是读取事务日志的,所以有些延迟事务不包括。如 AlwaysOn 可用性组和镜像 ,故障转移群集,事务复制,日志传送,日志备份。对于延迟的持久性,SQL Server 的意外关闭和预期关闭/重新启动没有区别。更多参考 控制事务持续性
相关文章推荐
- SQL 2014新功能介绍系列4 - 延迟事务持续性(Delayed Durability Transactions)
- DCL(Data Control Language)语句&事务控制语句transaction on Oracle&三范式
- SQL Server 2014新功能 -- 延迟事务持久性(Delayed Transaction Durability)
- SQL 2014新功能介绍系列4 - 延迟事务持续性(Delayed Durability Transactions)
- 使用Spring(13)Spring与MyBatis整合(二)DataSourceTransactionManage把事务控制在Service层
- SQLServer 在存储过程里使用事务控制的简单小例子
- SqlServer系列笔记——事务(Transaction)
- asp.net中使用Sqlserver事务时的体会,借鉴测试项目的脚本控制思想...
- 事务(Transaction)是并发控制的基本单位
- spring的事务中程序控制事务成功失败(Transaction marked as rollback)
- SQLSERVER2014事务日志延迟提交测试
- spring的事务中程序控制事务成功失败(Transaction marked as rollback)
- SQL Server 2014新特性——事务持久性控制
- SQLSERVER之事务TRANSACTION笔记
- 使用TransactionTemplate 编程式控制事务
- 自定义struts(二)--FakeStruts实现@Transaction 注解事务控制
- 云计算设计模式翻译(三):Compensating Transaction Pattern(事务修正模式)
- 解决spring mvc 多数据源切换,不支持事务控制的问题
- Oracle 控制文件(CONTROLFILE)
- SQLServer 延迟事务持久性