你的位置:首页 > 软件开发 > 数据库 > 数据库的快照隔离级别(Snapshot Isolation)

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

发布时间:2016-12-24 17:00:03
隔离级别定义事务操作资源和更新数据的隔离程度,在SQL Server中,隔离级别只会影响读操作申请的共享锁,而不会影响写操作申请的互斥锁。隔离级别控制事务在执行读操作时:在读数据时是否使用共享锁,申请何种类型的隔离级别;事务持有读锁的时间读操作引用其他事务更新的数据行时,控制读操 ...

隔离级别定义事务操作资源和更新数据的隔离程度,在SQL Server中,隔离级别只会影响读操作申请的共享锁,而不会影响写操作申请的互斥锁。隔离级别控制事务在执行读操作时:

  • 在读数据时是否使用共享锁,申请何种类型的隔离级别;
  • 事务持有读锁的时间
  • 读操作引用其他事务更新的数据行时,控制读操作的行为:
    • 被阻塞,等待其他事务释放互斥锁;
    • 读取事务提交后的版本,该数据行在事务开始时存在;Retrieves the committed version of the row that existed at the time the statement or transaction started.
    • 读没有提交的数据;

在执行写操作时,事务持有互斥锁,直到事务结束才释放,互斥锁不受事务隔离级别的影响。隔离性和并发性是此消彼长的关系。在SQL Server中,互斥锁和任意锁都不兼容,在同一时间,同一个数据行上,只能有一个事务持有互斥锁,就是说,写操作是顺序进行的,不能并发。

Choosing a transaction isolation level does not affect the locks acquired to protect data modifications. A transaction always gets an exclusive lock on any data it modifies, and holds that lock until the transaction completes, regardless of the isolation level set for that transaction. 

事务的隔离级别共有5个,使用SET命令修改Session-Level的隔离级别,使用DBCC UserOptions 查看当前Session的隔离级别:

数据库的快照隔离级别(Snapshot Isolation)数据库的快照隔离级别(Snapshot Isolation)
SET TRANSACTION ISOLATION LEVEL   READ UNCOMMITTED  | READ COMMITTED  | REPEATABLE READ  | SNAPSHOT  | SERIALIZABLEDBCC UserOptions

原标题:数据库的快照隔离级别(Snapshot Isolation)

关键词:数据库

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。