sqlserver锁和隔离级别

概念:

常见的锁相关概念参见 sqlserver中的锁

隔离级别:

未提交读,读取到未提交的数据

已提交读

  1,悲观模式(is_read_committed_snapshot_on=0,默认设置),传统的已提交读,只能读取到已经提交的数据。读写会产生冲突。

  2,乐观模式(is_read_committed_snapshot_on=1),加入行版本控制,只能读取到已提交的数据,读写不会产生冲突,并发性更好,生产环境需要测试。

可重复读,一个事务中,多次读取相同的一条或者几条数据,看到的结果是一样的

可序列化,这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。

快照隔离,启用 SNAPSHOT(快照) 隔离级别时,每次更新行时,SQL Server 数据库引擎在 tempdb 中存储原始行的副本,并为该行添加事务序列号。

 

 

快照和MVCC

目前多数关系数据库采用2PL协议保证了并发事务执行的可串行化,这样就产生了读写互斥的问题,即S锁和X锁的互斥。

多版本并发控制(Multi-Version Concurrency Control,MVCC)较好地解决了这一问题。在多版本的系统中,每一次写数据均产生一个新的版本,读操作可以根据需要读取合适的版本,因此读写操作互不阻塞。MVCC虽然提高了并发度,但也带来了维护多个版本的存储开销。

Microsoft SQL Server 数据库引擎引入了现有事务隔离级别的一种新的实现方式 - 已提交读,用于提供使用行版本控制的语句级快照。SQL Server 数据库引擎还引入了一个新的事务隔离级别 - 快照,用于提供也使用行版本控制的事务级快照。

版本存储区是 tempdb 中的数据页集合。如果有多个事务修改行,则该行的多个版本将被链接到一个版本链中。使用行版本控制的读操作将检索每一行在事务或语句启动时已提交的最后一个版本。

 

转载于:https://www.cnblogs.com/shizheyangde/p/7409850.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值