栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数据库并发控制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据库并发控制

并发控制 为何要并发?

事物有两种执行顺序

(1)串行访问-----事物顺序执行,一个事物完全结束后才开始另一事物

(2)并发访问-----多个事物同时启动但交错执行各事物中的操作

而操作的交错执行就需要调度 (Schedule)

调度的概念:“事物集”中一串有序的操作集

并发的目的:(1)改善系统的资源利用率 (2)改善短事物的响应时间

并发执行可能引起的问题

1.丢失更新(lost update)

丢失更新亦称覆盖未提交的数据,原因是两个事务对同一数据并发地写入引起,称为写-写冲突(write-write conflict)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-63gHTviq-1656312463515)(C:UsersaLizeAppDataRoamingTyporatypora-user-imagesimage-20220626231248209.png)]

2.读脏数据(dirty read)

读脏数据亦称为读未提交的数据,由于一事务读另一事务尚未提交的数据引起,称为写-读冲突(write-read conflict)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XP6ufUS0-1656312463515)(C:UsersaLizeAppDataRoamingTyporatypora-user-imagesimage-20220626231441544.png)]

3.读值不可复现(unrepeatable read)

因读-写冲突引起(read-write conflict)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sxcsAJLF-1656312463516)(C:UsersaLizeAppDataRoamingTyporatypora-user-imagesimage-20220626231230032.png)]

由上可以看出,把不同事务中对同一对象进行WW、 RW或WR的操作对进行交错都会造成冲突。因此,在安排事务 操作交错(即并发执行)时,应将这些操作对隔离

基于锁的并发控制协议

加锁协议类型: ① X锁 ②(S,X)锁 ③(S,U,X)锁 ④ 多粒度加锁或封锁

X锁加锁协议

在该协议中,只有一种锁称为X锁(eXclusive),亦称为排他/独占锁。既可用于读操作,亦可用于写操作。一个事务对某个 数据对象加排他锁后,其它事务就不能对该数据对象加锁

相容(或冲突)矩阵:说明锁请求在什么情况下可获准或被拒绝

(S,X)加锁协议

在该加锁协议中有两把锁,S锁(sharing locks)用于读操作 X锁(exclusive locks)用于写操作

与X锁协议相比,由于S锁只用于读操作,故S锁与S锁是相容的,既同一数据对象允许多个事物并发读,这比单一的X锁提高了读并发度

(S,U,X)锁协议

在该协议中除S,X锁外又添加了U锁(update locks)。事物要更新数据对象时,先申请该对象的U锁。数据对象加了U锁后,仍允许其他事物对它加S锁。在最后写入时,事物再申请将U锁申请为X锁。由于不必在事物执行的全过程中加X锁,可进一步提高并发度

多粒度加锁协议

在实际运用中,有时要访问大片数据,而有时只访问个别数据,为此,可提供多级加锁单位,根据应用需要加以选用,而在实际的现代大型DBMS中,并发度要求并不高,一般以表为加锁单位,被称为单粒度加锁(Single Granularity Locking)

死锁

事物等待关系:一个事物如申请锁而未批准,则需等待其他事物释放锁,从而形成事物间的等待关系

死锁:当事物出现循环等待时,如不加干预,则会一直等待下去,形成死锁(Dead lock)

死锁的预防

基本思想就是避免出现循环等待

给每个事物一个优先级,禁止低优先级的事物等待高优先级的事物,事物的优先级往往用时间戳(Time Stamp)来完成

时间戳:一个唯一的、随时间增长的整数

时间戳越前,事物优先级越高,既越老的事物,优先级越高

死锁预防的两个策略:等待-死亡(wait-die);击伤-等待(wound-wait)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8BMrQMXX-1656312463517)(C:UsersaLizeAppDataRoamingTyporatypora-user-imagesimage-20220627142014592.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6LSnDgnv-1656312463518)(C:UsersaLizeAppDataRoamingTyporatypora-user-imagesimage-20220627142024661.png)]

死锁的检测方法

检测:(1)超时法 (2)等待图法

超时法:设定一个时限,如果一个事务等待锁的时间超过预先的设定值,则主观认定其处于循环等待中并将其撤销

等待图法:用一个有向图来存储事务队列,顶点W是当前运行事务的集合,U是边的集合(Ti,Tj | Ti等待Tj),当某个锁请求加入队列时,锁管理器会向图中增加一条边;而某个锁请求得到获准时,它会从图中删除相应的边

当且仅当等待图中出现回路时,死锁才发生

死锁的处理

核心思想在于打破循环等待但不丢失事务

(1)在循环等待的事务中选一事务作为牺牲者

(2)回退牺牲者事务,释放它的锁和其他资源

图中出现回路时,死锁才发生

死锁的处理

核心思想在于打破循环等待但不丢失事务

(1)在循环等待的事务中选一事务作为牺牲者

(2)回退牺牲者事务,释放它的锁和其他资源

(3)将释放的锁让个等待它的事务

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/996010.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号