The insert operation does not cause a row version to be generated because there is really no prvious version of the row being inserted.

both deleted and update operations lead to row versions.

demo:

USE master

GO

-------------------------------------------------------------------

--创建SnapTestDB数据库,并将数据库开启READ_COMMITTED_SNAPSHOT

--和ALLOW_SNAPSHOT_ISOLATION选项

CREATE DATABASE SnapTestDB

GO

ALTER DATABASE SnapTestDB SET READ_COMMITTED_SNAPSHOT ON

GO

ALTER DATABASE SnapTestDB SET ALLOW_SNAPSHOT_ISOLATION ON

GO

---------------------------------------------------------------------

--检查数据库快照设置

SELECT

DB.is_read_committed_snapshot_on,

DB.snapshot_isolation_state_desc,

DB.snapshot_isolation_state

FROM sys.databases DB

WHERE DB.name ='SnapTestDB'

----------------------------------------------------------------------

--创建测试表SnapTestDB.dbo.Test1

USE SnapTestDB

GO

CREATE TABLE SnapTestDB.dbo.Test1(C1 INT,C2 INT)

GO

----------------------------------------------------------------------

--测试在插入时是否会有版本数据

BEGIN TRAN TR1

INSERT SnapTestDB.dbo.Test1(C1,C2)

SELECT 1,1

UNION ALL

SELECT 2,2

SELECT COUNT(1) FROM sys.dm_tran_version_store VS

WHERE VS.database_id=DB_ID('SnapTestDB')

COMMIT

--测试结果:会产生版本数据

----------------------------------------------------------------------

--测试在更新时是否会有版本数据

BEGIN TRAN TR1

UPDATE SnapTestDB.dbo.Test1

SET C1=0

SELECT COUNT(1) FROM sys.dm_tran_version_store VS

WHERE VS.database_id=DB_ID('SnapTestDB')

COMMIT

--测试结果:会产生版本数据

----------------------------------------------------------------------

--测试在更新时是否会有版本数据

BEGIN TRAN TR1

DELETE FROM SnapTestDB.dbo.Test1

WHERE C1=0

SELECT COUNT(1) FROM sys.dm_tran_version_store VS

WHERE VS.database_id=DB_ID('SnapTestDB')

COMMIT

--测试结果:会产生版本数据

----------------------------------------------------------------------

--总结

--在READ_COMMITTED_SNAPSHOT下,由于在TempDB中保存了版本数据,

--因此SELECT不会被其他事务的UPDATE或DELETE所阻塞,从而提高了并发性,

--但也因此加重了TempDB的压力

--只有DELETE和UPDATE才会引发版本数据,版本数据存放在TmepDB中,SQL Server

--会智能地周期性移除那些无用的版本数据,移除版本数据会有一定延迟(不是立即移除无用的版本数据)

--如果版本数据被一个事务使用且该事务长时间未提交,会导致TempDB的占用空间迅速暴增,因此应尽量缩短事务

Tempdb--Snapshot的更多相关文章

  1. 数据库的快照隔离级别(Snapshot Isolation)

    隔离级别定义事务处理数据读取操作的隔离程度,在SQL Server中,隔离级别只会影响读操作申请的共享锁(Shared Lock),而不会影响写操作申请的互斥锁(Exclusive Lock),隔离级 ...

  2. Expert 诊断优化系列------------------给TempDB 降温

    前面文章针对CPU.内存.磁盘.语句.等待讲述了SQL SERVER的一些基本的问题诊断与调优方式.为了方便阅读给出导读文章链接方便阅读: SQL SERVER全面优化-------Expert fo ...

  3. 第23/24周 临时数据库(TempDb)

    在今天的性能调优培训里我们讨论下TempDb——SQL Server的公共厕所,在SQL Server里我是这样描述它的.我们的每个人都会经常使用TempDb.有些人直接使用它,有些人不直接使用它.今 ...

  4. SQL server performance - tempdb

    When tempdb is used? User objects: User-defined tables and indexes System tables and indexes Global ...

  5. SQL Server 2008性能故障排查(四)——TempDB

    原文:SQL Server 2008性能故障排查(四)--TempDB 接着上一章:I/O TempDB: TempDB是一个全局数据库,存储内部和用户对象还有零食表.对象.在SQLServer操作过 ...

  6. SQL Server中TempDB管理(版本存储区的一个example)

    原文:SQL Server中TempDB管理(版本存储区的一个example) 原文来自: http://blogs.msdn.com/b/sqlserverstorageengine/archive ...

  7. 监测谁用了SQL Server的Tempdb空间

    原文:监测谁用了SQL Server的Tempdb空间 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/02/11/sql-server-tempdb. ...

  8. Tempdb怎么会成为性能瓶颈

    原文:Tempdb怎么会成为性能瓶颈 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/01/25/tempdb.aspx 我曾经遇到过这样一个性能问题. ...

  9. SQL Server-聚焦SNAPSHOT基于行版本隔离级别详解(三十)

    前言 上一篇SQL Server详细讲解了隔离级别,但是对基于行版本中的SNAPSHOT隔离级别仍未完全理解,本节再详细讲解下,若有疑义或不同见解请在评论中提出,一起探讨. SNAPSHOT行版本隔离 ...

  10. [转]如何监测谁用了SQL Server的Tempdb空间

    Tempdb 系统数据库是一个全局资源,供连接到 SQL Server 实例的所有用户使用.在现在的SQL Server里,其使用频率可能会超过用户的想象.如果Tempdb空间耗尽,许多操作将不能完成 ...

随机推荐

  1. 手工编写servlet

    index.jsp: <%@ page language="java" import="java.util.*" contentType="te ...

  2. 7_bootstap之综合案例

    13.综合案例 13.1.案例需求 要求:页面顶部的三部分在PC屏幕上显示为一行,在移动设备屏幕上显示为一部分一行: 导航条在大屏幕展示全部内容,在移动设备上需要将内容能够折叠/展开: 用户名/密码/ ...

  3. MyEclipse8.6启动后提示内存不足的解决方案(亲测,完美解决)

    转自:http://www.bubuko.com/infodetail-1625857.html 最近可能由于公司项目大了,启动MyEclipse后经常提示内存不足的警告框,如下: 其实点击close ...

  4. WordPress无法发送电子邮件,可能原因:您的主机禁用了mail()函数解决方案

    体验更优排版请移步原文:http://blog.kwin.wang/website/wp-cant-send-email-solution.html 最近折腾了下WordPress,给米表 搭了个论坛 ...

  5. VB.Net条形码编程的方法

    一.条形码的读取用过键盘口式的扫条码工具的朋友就知道,它就如同在鍵盘上按下数字鍵一样,基本不需任何编程和处理.但如果你使用的是其它接口的话,可能你就要为该设备编写通讯代码了.以下有一段简单的25针串口 ...

  6. Guide to installing 3rd party JARs

    Although rarely, but sometimes you will have 3rd party JARs that you need to put in your local repos ...

  7. c#正则获取html里面a标签href的值

    获取单个a中href的值: string str = "<a href=\"http://www.itsve.com\">下载</a>" ...

  8. 二硫化铼(ReS2)的电子输运特性及逻辑器件研究进展

    南京大学物理学院.固体微结构物理国家重点实验室.微结构科学与技术协同创新中心的缪峰教授课题组和王伯根教授课题组在新型二维材料二硫化铼(ReS2)的电子输运特性及逻辑器件研究领域取得重要进展,相关论文于 ...

  9. Pollard Rho因子分解算法

    有一类问题,要求我们将一个正整数x,分解为两个非平凡因子(平凡因子为1与x)的乘积x=ab. 显然我们需要先检测x是否为素数(如果是素数将无解),可以使用Miller-Rabin算法来进行测试. Po ...

  10. 深入理解Spring的容器内事件发布监听机制

    目录 1. 什么是事件监听机制 2. JDK中对事件监听机制的支持 2.1 基于JDK实现对任务执行结果的监听 3.Spring容器对事件监听机制的支持 3.1 基于Spring实现对任务执行结果的监 ...