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

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

控制事务持久性

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

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

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

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

目录

控制事务持久性

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

完全持久事务

延迟持久性事务

如何控制事务的持久性

数据库级别

存储过程级别

语句级别

如何强制日志刷新

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

 

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

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

完全持久事务

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

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





    本文转自 Fanr_Zh 博客园博客,原文链接:http://www.cnblogs.com/Amaranthus/p/3683076.html ,如需转载请自行联系原作者

相关实践学习
使用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
相关文章
|
15天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
52 10
|
1月前
|
SQL 存储 数据库
sql事务、视图和索引
sql事务、视图和索引
14 0
|
25天前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
17 0
|
15天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
88 6
|
2天前
|
SQL 数据管理 关系型数据库
如何在 Windows 上安装 SQL Server,保姆级教程来了!
在Windows上安装SQL Server的详细步骤包括:从官方下载安装程序(如Developer版),选择自定义安装,指定安装位置(非C盘),接受许可条款,选中Microsoft更新,忽略警告,取消“适用于SQL Server的Azure”选项,仅勾选必要功能(不包括Analysis Services)并更改实例目录至非C盘,选择默认实例和Windows身份验证模式,添加当前用户,最后点击安装并等待完成。安装成功后关闭窗口。后续文章将介绍SSMS的安装。
6 0
|
10天前
|
SQL 安全 网络安全
IDEA DataGrip连接sqlserver 提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法
IDEA DataGrip连接sqlserver 提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法
23 0
|
15天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
19天前
|
SQL 数据安全/隐私保护
SQL Server 2016安装教程
SQL Server 2016安装教程
21 1
|
19天前
|
SQL 安全 Java
SQL server 2017安装教程
SQL server 2017安装教程
17 1
|
1月前
|
SQL 存储 Python
Microsoft SQL Server 编写汉字转拼音函数
Microsoft SQL Server 编写汉字转拼音函数