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空间耗尽,许多操作将不能完成 ...
随机推荐
- solr查询优化(实践了一下效果比较明显)
什么是filtercache? solr应用中为了提高查询速度有可以利用几种cache来优化查询速度,分别是fieldValueCache,queryResultCache,documentCache ...
- 20165233 实验一 Java开发环境的熟悉
20165233 实验一 Java开发环境的熟悉 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 2.完成实验.撰写实验 ...
- 关于document.cookie的使用
设置cookie每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie:document.cookie="userId=828";如果要一次 ...
- Thrift 实现 JAVA,PHP,C#,Python 互相通信
Thrift介绍 https://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/index.html 首先需要下载 Thrift.exe ...
- java用while循环设计轮询线程的性能问题
java用while循环设计轮询线程的性能问题 轮询线程在开发过程中的应用是比较广泛的,在这我模拟一个场景,有一个队列和轮询线程,主线程往队列中入队消息,轮询线程循环从队列中读取消息并打印消息内容.有 ...
- thinkphp 3.2.3 addAll方法的坑
在批量插入一组数据的时候,总是提示以下错误 Insert value list does not match column list: Column count doesn't match value ...
- win10系统的快捷键
1.win10特有的快捷键:任务视图和虚拟桌面相关 (1)Win + Tab:查看任务视图 (2)Win + Ctrl + D:在任务视图中新建虚拟桌面 (3)Win + Ctrl + F4:关闭当前 ...
- Golang之json序列化(struct,int,map,slice)
老规矩,直接上代码 package main import ( "encoding/json" "fmt" ) //把结构体都改小写 type User str ...
- c#解决Nullable类型的转换 (包含DataContract的序列化和反序列化以及 该例子应用在反射属性setvalue的时候有用)
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Reflect ...
- IntelliJ IDEA 2017版 SpringBoot的Json字符串返回
一.说明 SpringBoot框架已经自动封装好json字符串解析,所以我们只需要用它的注解来返回操作就可以了. 二.实战 1.书写一个实体类User,设置属性id和name package com. ...