zoukankan      html  css  js  c++  java
  • 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的占用空间迅速暴增,因此应尽量缩短事务

  • 相关阅读:
    h5布局之道(最终篇)
    javascript 数组的常用方法总结
    排序算法之简单排序算法
    浅谈h5移动端页面的适配问题
    开园子啦(浅谈移动端以及h5的发展)
    Android开发(二):RelativeLayout、FrameLayout、LinearLayout、TableLayout、AbsoluteLayout各种Layout属性
    Android开发(一):android环境搭建
    为何没有人用DELPHI IDHTTP + WEB做三层应用
    Asp.net学习1-弹出消息框
    处理SQL函数IN问题
  • 原文地址:https://www.cnblogs.com/TeyGao/p/3519616.html
Copyright © 2011-2022 走看看