SQLServer-并发控制-锁机制

本文探讨了SQLServer中的并发问题,包括丢失更新、脏读、不一致的分析和幻读。介绍了悲观并发控制和乐观并发控制,并详细阐述了锁的粒度、层次结构、可锁定资源及锁的模式。还讨论了锁的兼容性、锁升级、事务隔离级别及其对并发性能的影响,提供了减少锁定和升级的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

并发可能导致的影响

1. 丢失更新:多个事务同时更新同一行;

2. 脏读:修改过程中的数据被读取;

3. 不一致的分析(不可重复读):读取的事务里面,符合读取条件的行搜索条件被更改了;

4. 幻读:读取的事务里面,符合读取条件的行被删除或者插入了;

34 的区别在于前者是更新 ,后者是插入删除。

 

并发控制类型:

1. 悲观并发控制:用到锁来保护数据。用于锁消耗低于回滚事务的成本环境中;

2. 乐观并发控制:并发过程中不产生锁,读取数据后检查用户数据,判断是否产生错误, 回滚事务。用于数据争用少的环境。

 

锁:是数据库引擎用来同步多个用户同事对一个数据块访问的一种机制

 

锁的粒度和层次结构

数据库引擎具有多粒度锁定,允许一个事务锁定不同类型的资源。

锁定在较小的粒度(例如行)可以提高并发度,但开销大,因为锁定的范围越小,需要的锁就越多(锁定了许多行,就需要持有更多的锁);锁定在较大的粒度(例如表)会降低并发度,但是消耗较低,因为锁定的范围大,需要的锁就越小(锁定了表,限制了其他事物对表的访问)。

 

数据库引擎通常必须获取多粒度级别上的锁才能完整地保护资源。这种多粒度级别上的锁称为锁层次结构

可以锁定的资源:

可被锁定的资源

说明

RID

用于锁定堆中的单个行的行标识符

KEY

索引中用于保护可序列化事务中的键范围的行锁

PAGE

数据库中的8KB页,数据页或者索引页

EXTENT

一组连续的页

HOBT

堆或者B树,保护索引或没有聚集索引的表中数据页堆的锁

TABLE

包括所有数据和索引的整个表

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值