Tempdb--Snapshot
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的更多相关文章
- 数据库的快照隔离级别(Snapshot Isolation)
隔离级别定义事务处理数据读取操作的隔离程度,在SQL Server中,隔离级别只会影响读操作申请的共享锁(Shared Lock),而不会影响写操作申请的互斥锁(Exclusive Lock),隔离级 ...
- Expert 诊断优化系列------------------给TempDB 降温
前面文章针对CPU.内存.磁盘.语句.等待讲述了SQL SERVER的一些基本的问题诊断与调优方式.为了方便阅读给出导读文章链接方便阅读: SQL SERVER全面优化-------Expert fo ...
- 第23/24周 临时数据库(TempDb)
在今天的性能调优培训里我们讨论下TempDb——SQL Server的公共厕所,在SQL Server里我是这样描述它的.我们的每个人都会经常使用TempDb.有些人直接使用它,有些人不直接使用它.今 ...
- SQL server performance - tempdb
When tempdb is used? User objects: User-defined tables and indexes System tables and indexes Global ...
- SQL Server 2008性能故障排查(四)——TempDB
原文:SQL Server 2008性能故障排查(四)--TempDB 接着上一章:I/O TempDB: TempDB是一个全局数据库,存储内部和用户对象还有零食表.对象.在SQLServer操作过 ...
- SQL Server中TempDB管理(版本存储区的一个example)
原文:SQL Server中TempDB管理(版本存储区的一个example) 原文来自: http://blogs.msdn.com/b/sqlserverstorageengine/archive ...
- 监测谁用了SQL Server的Tempdb空间
原文:监测谁用了SQL Server的Tempdb空间 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/02/11/sql-server-tempdb. ...
- Tempdb怎么会成为性能瓶颈
原文:Tempdb怎么会成为性能瓶颈 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/01/25/tempdb.aspx 我曾经遇到过这样一个性能问题. ...
- SQL Server-聚焦SNAPSHOT基于行版本隔离级别详解(三十)
前言 上一篇SQL Server详细讲解了隔离级别,但是对基于行版本中的SNAPSHOT隔离级别仍未完全理解,本节再详细讲解下,若有疑义或不同见解请在评论中提出,一起探讨. SNAPSHOT行版本隔离 ...
- [转]如何监测谁用了SQL Server的Tempdb空间
Tempdb 系统数据库是一个全局资源,供连接到 SQL Server 实例的所有用户使用.在现在的SQL Server里,其使用频率可能会超过用户的想象.如果Tempdb空间耗尽,许多操作将不能完成 ...
随机推荐
- ROS+nfdump 用户上网日志
ROS 本身提供了 Traffic Flow 功能,与 Scisco的 Netflow 功能类似.只要开启 Traffic Flow 传到日志服务器即可, 这种设置系统开销很小,可以传到本地网络,也可 ...
- PHP向客户端广播信息
在网络中数据传播分为:Unicast(单播) , Multicast(多播或者组播) 和 Broadcast(广播).广播和多播仅应用于UDP,它们对需将报文同时传往多个接收者的应用来说十分重要.而 ...
- CFGym 101490E 题解
一.题目链接 http://codeforces.com/gym/101490 二.题面 三.题意 给你一个图,n个点,m条边,一个x,从顶点1走到顶点n.假设从顶点1走到顶点n的最短路为d,x代表你 ...
- 前端之promise
Promise是一个非常重要的方法,它可以是一些异步操作最后归为有序的进行. url: from django.contrib import admin from django.urls import ...
- python的接口
写法一: class Payment: def pay(self, money): raise NotImplementedError class Alipay(Payment): def pay(s ...
- NotePad++替换行前、行后空格,替换空行
用 Notepad++ 打开,把每一个将要放在表中单元格的内容放一行(注: ^ 代表行首 $ 代表行尾) 去除行尾空格和空白行:按CTRL+H 选择正则表达式– 查找目标:\s+$ 替换为空 去除行首 ...
- 《C语言基础日常笔记》
1. 类型转换-----------------20130902 a, 浮点数(包括单精度与双精度)赋值给整型变量时,舍弃浮点数的小数部分,直接将其整数部分存放在整型变量里. b, 整型变量赋值给浮点 ...
- 13.Roman to Integer (HashTable)
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 t ...
- for 续9
-------siwuxie095 for 拾遗: 一: for 语句里,do 后面一般会有括号,有括号就是复合语句, 假如需要用到括号里的变量,就需要 ...
- Win2003+apache+PHP+SqlServer2008 配置
Win2003+apache+PHP+SqlServer2008 配置 安装前的准备: 1.Apache2.2.2 2.PHP5.2.17 3.SqlServer2008 4.sqlncli. ...