SQL Server 2014新特性——事务持久性控制

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 控制事务持久性 SQL Server 2014之后事务分为2种:完全持久, 默认或延迟的持久。 完全持久,当事务被提交之后,会把事务日志写入到磁盘,完成后返回给客户端。 延迟持久,事务提交是异步的,在事务写入到磁盘前,事务提交返回给客户端。

控制事务持久性

SQL Server 2014之后事务分为2种:完全持久, 默认或延迟的持久。

完全持久,当事务被提交之后,会把事务日志写入到磁盘,完成后返回给客户端。

延迟持久,事务提交是异步的,在事务写入到磁盘前,事务提交返回给客户端。

以前都是完全持久,现在多了个延迟持久,延迟持久只有当日志缓存刷新的时候才会被写入到磁盘保证事务完整性。

目录

控制事务持久性... 1

完全持久事务和延迟持久事务持久性... 1

完全持久事务... 1

延迟持久性事务... 1

如何控制事务的持久性... 2

数据库级别... 2

存储过程级别... 2

语句级别... 2

如何强制日志刷新... 2

延迟持续性和其他 SQL Server 功能... 3

 

完全持久事务和延迟持久事务持久性

说白了,完成持久事务完全保证事务的持久性,延迟持久事务延迟保证事务的持久性。

完全持久事务

只要存在以下情况,就应使用完全持久事务:

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

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

完全持久事务保证

1.事务提交后,修改对其他事务时可见的。

2.完全保证事务的持久性

延迟持久性事务

延迟持久性事务,通过异步的把事务日志写入到磁盘来实现,在写入到磁盘之前,日志被保存在缓存区中,当缓冲区满了或者刷新缓冲区了把日志写入磁盘,依次来减少磁盘资源争用:

1.事务提交不用等待写入到磁盘完成

2.减少磁盘争用从而提高,事务吞吐量。

使用场景:

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

2.在事务日志写入的时候发现瓶颈

3.磁盘资源争用率很高

延迟持久事务保证:

1.提交后,修改对其他事务可见

2.持久性只能靠缓存刷新来保证:

         事务日志缓存在以下情况下刷新:

         a.当同一个数据库的完全持久性事务提交,并成功

b.成功执行存储过程sp_flush_log

c.缓存区满了,自动刷新

如何控制事务的持久性

数据库级别

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

DISABLE:默认设置,不管如何保持完全持久性

ALLOWD:允许延迟持久性执行,要看存储过程,或者TSQL级别的设置

FORCED:强制所有的事务都是延迟持久性的

存储过程级别

DELAYED_DURABILITY = { OFF | ON }

OFF:默认设置,不使用延迟持久事务

ON:启动延迟持久事务

CREATE PROCEDURE <procedureName> …

WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER

AS BEGIN ATOMIC WITH

(

    DELAYED_DURABILITY = ON,

    TRANSACTION ISOLATION LEVEL = SNAPSHOT,

    LANGUAGE = N'English'

    …

)

END

 

语句级别

COMMIT [ { TRAN | TRANSACTION } ] [ transaction_name | @tran_name_variable ] ] [ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]

OFF:默认设置,不使用延迟持久事务

ON:启动延迟持久事务

如何强制日志刷新

1.提交完全持久性事务

2.使用系统存储过程sp_flush_log

延迟持续性和其他 SQL Server 功能

更改跟踪和变更数据捕获

具有更改跟踪属性的所有事务都是完全持久事务。 如果一个事务的所有写入操作都对表进行,而这些表支持更改跟踪或变更数据捕获 (CDC),则该事务具有更改跟踪属性。

崩溃恢复

一致性可得到保证,但已提交的延迟持久事务的一些更改可能会丢失。

跨数据库和 DTC

如果事务跨数据库或是分布式事务,则无论数据库或事务提交设置如何,它都是完全持久事务。

AlwaysOn 可用性组和镜像

延迟持久事务并不能保证主数据库或任何辅助数据库的持续性。 此外,它们也不保证了解辅助数据库的事务。 提交后,在从同步辅助数据接收到 ACK 之前,控制权就会归还客户端。

故障转移群集

某些延迟持久事务写入可能会丢失。

事务复制

延迟持久事务并不保证其复制。 只有在事务成为持久事务后才会得到复制。

日志传送

传送的日志中仅包含已成为持久事务的事务。

日志备份

备份中仅包含已成为持久事务的事务。

参考:
http://msdn.microsoft.com/zh-cn/library/dn449490(v=sql.120).aspx
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
3月前
|
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事件查看器以获取更多线索。
|
17天前
|
SQL Oracle 关系型数据库
[SQL]事务
本文介绍了事务处理的基本概念,包括事务的四大特性(原子性、一致性、隔离性、持久性)及生命周期。文章还详细解释了事务的保存点、四种事务隔离级别及其异常读现象,并提供了设置事务隔离级别的方法。最后,作者建议读者深入学习相关理论以更好地理解事务隔离级别。
43 0
|
2月前
|
关系型数据库 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)")
|
2月前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
116 0
|
3月前
|
SQL 监控 供应链
|
4月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
115 13
|
4月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
4月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
61 6
|
4月前
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
382 1
|
3月前
|
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
480 0