zoukankan      html  css  js  c++  java
  • sqlserver快照,启用基于行版本控制的隔离级别

        在sqlserver标准的已提交读(read committed)隔离级别下,读写操作相互阻塞。未提交读(read uncommitted)虽然不会有这种阻塞,但是读操作可能会读到脏数据,这是大部分用户不能接受的。

        ORACLE使用的是另一种处理方式:在任何一个修改之前,先对修改前的版本做一个复制,后续的一切读操作都会去读这个复制的版本,修改将创建一个新的版本。在这种处理方式下,读写操作不会互相阻塞。使用这种行版本控制机制的好处,是系统的并发性比较高,但是缺点是用户读到的虽然不是一个脏数据,但是可能是个正在被修改马上就要过期的数据。如果根据这个过期的值做数据修改,可能会产生逻辑错误。

        有些用户为了更高的并发性而不在乎这种缺点,所以更喜欢ORACLE的那种处理方法。
    为了满足这部分用户的需求,SQL2005也引入了这种机制,来实现类似的功能。所以选取行版本控制隔离级别也可以成为消除阻塞和死锁的一种手段。

    --查询数据库状态  
    select name,user_access,user_access_desc,
        snapshot_isolation_state,snapshot_isolation_state_desc,
        is_read_committed_snapshot_on
    from sys.databases
    GO
    
    ---启用指定数据库的快照隔离
    ALTER DATABASE [dbName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    GO
    ALTER DATABASE [dbName] SET ALLOW_SNAPSHOT_ISOLATION ON
    GO
    ALTER DATABASE [dbName] SET READ_COMMITTED_SNAPSHOT ON
    GO
    ALTER DATABASE [dbName] SET MULTI_USER
    GO


        开启了行版本控制之后,sqlserver会把行版本存放在tempdb里。修改的数据越多,需要存储的信息越多,对sqlserver额外的负载就越大。所以如果一个应用要从其他隔离级别转向使用行版本控制,需要做特别的测试,以确保现有的软硬件配置能支持额外的负荷,应用程序能够达到相似的响应速度。

  • 相关阅读:
    Globus Toolkit 4.0正式版发布
    五四爱国纪念歌——最早反映五四运动的歌曲(zz)
    历史上的昨天和今天(zz)
    苹果:2.7GHz G5比3.6GHz P4快98%(zz)
    上海地铁又有人跳轨……
    使用IPAddress解析IP地址时要注意的问题
    WinHEC:电脑硬件和微软OS发展历程展(zz)
    emplace_back与push_back方法的区别
    处理Excel,填充空白区域
    折腾词库,一个词库互转程序
  • 原文地址:https://www.cnblogs.com/zhaoguan_wang/p/4568329.html
Copyright © 2011-2022 走看看