CMU15445 Lecture 17 Two-Phase Locking Concurrency Control
2PL是并发控制理论的一种实现方式
Transaction Locks
通过Lock来保证所有的execution schdule是serializable
lock manager管理lock的分配与释放
DBMS's lock-table 不需要持久化
- Lock:当有transaction需要修改一个tuple,lock manager将rid塞到队列中,那么其他transaction就不能去获取这个tuple
- Latch:在B+树index,光是单纯的使用lock并不能保证并发的正确性,如果没有latch,中间internal node会被修改,那么会出错
非两阶段锁任然不能够保证serializable
Two-Phase Locking
-
2PL是消极的,2PL会涉及级联回滚问题?
2PL会有限制并发,dirty read(也就是读到了还未commit的数据),dealock(即使是strong strict 2PL也不能解决deadlock)的问题,并且存在2PL并不能够允许所有的serializable都能够执行。strong strict 2PL
是指在commit或者abort的时候release lock,它能够防止级联终止
-
2PL能够在一个transaction的所有queries执行之前,动态的决定是否一个transaction能够访问一个DBMS的对象
-
阶段一:Growing:向lock manager获取锁。lock manager决定是否授予lock
-
阶段二:Shrinking:当一个transaction归还了第一个lock,那么它就进入了Shrinking阶段,它只能够去release lock,而不能够去acquire lock
前后两句话没有关系吧?
DeadLock Handling
有两种处理2PL中的deadlock
deadlock detection
通过wait-for graph检测deadlock?
回滚事务还分成: Completely,Minimally
下面的划线4.是指考虑了该node涉及的级联rollback
对于deadlock的检测,这里存在一种检测频率与陷入deadlock的txn的时间长短之间权衡,
Deadlock Prevention
不论是wait-die还是wound-wait,都是保证了只有一个方向会wait。因为没有双向的wait,所以可以避免deadlock
对于abort的young transaction,在restart时赋予其原来abort之前的priority,这样可以防止饥饿
Lock Granularities
存在着一种在并行性与系统开销之间的权衡
intention lock增加了并行性
Intention lock的存在目的:如果一个transaction需要对一个table加锁,那么它就是需要检测这个table的每一个tuple,但是这样花销很大,这时候可以在其它transaction对这个table的tuple加lock时,给这个table加一个intention lock。
SIX是指给table加上S-Lock,给其中某个tuple加上X-Lock
IX与IX为什么可以兼容?
对tuple加锁时,也需要对table加一定的锁
low-level lock太多,lock escalation会将直接将这些底层锁换成一个higher lock
一般来说,在使用DBMS时,不用显示的加锁
给整个数据库备份的时候,为了使得所有的table拿到同一个时间的数据,那么需要给整个数据库加一个S-lock
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」