控制事务持久性

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

SQL Server 2014新特性——事务持久性控制的更多相关文章

  1. SQL Server 2014 新特性——内存数据库

    SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...

  2. SQL Server 2014 新特性——内存数据库(转载)

    目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 内存优化表的索引 并发能力的提升 和竞争对手相比几点 ...

  3. 谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 撰写经历(Experience) 特约稿正文(Content-body) 第一部分:生活中资源 ...

  4. SQL Server 2014新特性——Buffer Pool扩展

    Buffer Pool扩展 Buffer Pool扩展是buffer pool 和非易失的SSD硬盘做连接.以SSD硬盘的特点来提高随机读性能. 缓冲池扩展优点 SQL Server读以随机读为主,S ...

  5. SQL Server 2014 新特性:IO资源调控

    谈谈我的微软特约稿:<SQL Server 2014 新特性:IO资源调控> 2014-07-01 10:19 by 听风吹雨, 570 阅读, 16 评论, 收藏, 收藏 一.本文所涉及 ...

  6. 小心SQL SERVER 2014新特性——基数评估引起一些性能问题

    在前阵子写的一篇博文"SQL SERVER 2014 下IF EXITS 居然引起执行计划变更的案例分享"里介绍了数据库从SQL SERVER 2005升级到 SQL SERVER ...

  7. SQL Server 2014新特性:五个关键点带你了解Excel下的Data Explorer

    SQL Server 2014新特性:五个关键点带你了解Excel下的Data Explorer Data Explorer是即将发布的SQL Server 2014里的一个新特性,借助这个特性讲使企 ...

  8. [SQL Server 2014] SQL Server 2014新特性探秘

    SQL Server 2014新特性探秘(1)-内存数据库   简介 SQL Server 2014提供了众多激动人心的新功能,但其中我想最让人期待的特性之一就要算内存数据库了.去年我再西雅图参加SQ ...

  9. SQL Server 2014新特性:其他

    AlwaysOn 增强功能 SQL Server 2014 包含针对 AlwaysOn 故障转移群集实例和 AlwaysOn 可用性组的以下增强功能: “添加 Azure 副本向导”简化了用于 Alw ...

随机推荐

  1. 介绍开源的.net通信框架NetworkComms框架 源码分析(五)ReservedPacketType

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  2. Chrome的ERR_UNSAFE_PORT解决办法

    今天早上来上班照往常一样,打开我的VS,编译运行程序,打不开??又是一阵调试,断点,很快我发现不是我的程序问题,因为在IE,Firefox里都可以正常打开,唯独Chrome报错.又仔细看了下报错页面, ...

  3. C#微信公众平台账号开发,从零到整,步骤详细。

    想到微信的火热,想到其他公司开发手游,如雷电,酷跑类的,都不是很火,但是弱智的“打飞机”和“天天酷跑”却是那么火热.于是乎,想做个微信营销的软件.首先想到的是手机连电脑wifi,用抓包工具抓微信的包, ...

  4. Entity Famework 的通过IOC注入实现

    1. 前言 最近刚换了一家公司,由于之前的公司代码并没有用到项目框架,需要我整理下NHibernate与Entity Framework之间的区别及适用性.并写出相关的示例代码 面试的时候吹的牛,得把 ...

  5. hibernate----1-N--jointable(人与地址)

    package com.ij34.dao; import java.util.HashMap; import java.util.HashSet; import java.util.Set; impo ...

  6. Mybatis if test中字符串比较

    <if test=" name=='你好' "> <if> 这样会有问题,换成 <if test=' name=="你好" '&g ...

  7. 上中下三个DIV,高度自适应(上高度固定,下固定,中间自适应)(代码来自X人)

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DivDemo.aspx.c ...

  8. JVM基本原理

    第一节 JVM内存模型 •堆栈简称栈,主要提供以下用途: –保存临时数据 –放置临时变量(局部.自动.堆栈) –保存调用现场 –方法返回值的传递 •堆主要提供以下用途: –存放对象(GC对象) –存放 ...

  9. bootstrap框架禁用谷歌字体

    bootstrap框架禁用谷歌字体 H5框架换字体.png

  10. 【转】ubuntu源码编译安装php常见错误解决办法

    ./configure -prefix=/usr/local/php -with-config-file-path=/etc -with-mysql=mysqlnd -with-mysqli=mysq ...