锁的作用范围通常在事务中,事务是建立在并发模式下。
从SQL Server 2005开始,加入了一种新的并发模式-----乐观并发。不管使用哪种并发模式,如果多个会话同时修改相同的数据,都会产生资源争用,然后引发一系列的问题。
1.存在的读现象:包括脏读、不可重复读和幻读。
2.丢失更新:一个会话的修改效果被另外一个会话意外覆盖
3.过量的锁定:过量的锁定会导致阻塞,导致资源压力和终端用户的响应延时
4.死锁:最少两个会话互相阻塞对方,引发死锁。SQL Server 尽可能自动侦测并干预死锁,最后给客户端返回1205错误
绝大部分基于锁的阻塞问题都可以通过优化查询、调整索引、修改隔离级别及表结构的设计来大大降低
一:悲观并发和乐观并发
默认情况下,SQLServer 都会采用悲观模式来应对并发。大量的并发操作,如果不使用悲观并发来防止多个会话对数据同时修改,会造成数据不一致。在该模式下,将会通过加锁的形式保护正在被读取的事务,以保证这些数据在读取过程中不被其他会话修改。在会话修改数据的过程中也会加锁,防止其他会话读取或者修改对应的数据。也就是在悲观模式下,读操作阻塞写操作,写操作阻塞读写操作。数据库中所有操作都会加锁。
原文地址:https://www.cnblogs.com/sunliyuan/p/9818804.html
时间: 2024-10-01 12:22:21