CMU 15445 14.二阶段锁定 + homework 4

DBMS包含一个锁管理器,用于决定事务是否可以锁定。 它了解系统内部的最新情况。
•共享锁(S-LOCK):允许多个事务同时读取同一对象的锁。 如果一个事务持有共享锁,则另一个事务可以获取该共享锁。
•独占锁定(X-LOCK):允许事务修改对象。 此锁与任何其他锁不兼容。 一次只能有一个事务持有独占锁。

使用锁执行:
1.事务从锁管理器请求锁(或升级)。
2.锁管理器根据其他事务当前持有的锁来授予或阻止请求。
3.当不再需要时,事务释放锁。
4.锁管理器更新其内部锁表,然后把锁给其他等待的事务。

二阶段锁定

两阶段锁定(2PL)是一种悲观的并发控制协议,用于确定是否允许事务访问数据库中的对象。协议不需要知道事务将提前执行​​的所有查询。


image.png

image.png

阶段#1:膨胀
•每个事务都从DBMS的锁管理器请求它所需的锁。
•锁管理器授予/拒绝锁定请求。
阶段#2:收缩
•事务在释放第一个锁后立即进入此阶段。
•允许事务仅释放先前获取的锁。它无法在此阶段获得新锁。
就其本身而言,2PL足以保证conflict serializability。它生成precedence graph是无环的。
2个缺点:
但它很容易出现级联中止,即当事务中止并且现在必须回滚另一个事务时,这会导致浪费很多资源。


image.png

还有一些可序列化的潜在计划,但2PL不允许这种计划(锁会限制并发)。

严格的2pl

事务只在完成时释放锁。 确实没有像普通2PL那样shrinking的阶段。
如果事务写入的值在该事务完成之前未被其他事务读取或覆盖,则调度是严格的。
这种方法的优点是DBMS不会导致级联中止。
同时只要把原来的值赋值回去就可以实现abort了。

为什么呢?
我们看一下s2pl的时序图


image.png

再看下abort是怎么做的
先undo,随后记log,然后unlock


image.png

下面要解决的就是2pl 的死锁问题

死锁问题的解决思路分为2种,一种是死锁预防,一种是死锁检测。

image.png

image.png

死锁检测

DBMS 创建 wait-for图:如果事务Ti等待事务Tj释放锁,从Ti到Tj有一条边。系统将定期检查等待图中的环,然后决定如何打破它。
•当DBMS检测到死锁时,它将选择“受害者”事务进行回滚以中断循环。
•受害者事务将重新启动或中止,具体取决于应用程序如何调用它
•选择受害者时需要考虑多个事务属性。没有一个选择比其他选择更好。 2PL DBMS都做不同的事情:
1.按年龄(最新或最旧的时间戳)。
2.按进度(执行的最少/大多数查询)。
3.已锁定的项目数量。
4.通过我们必须用它回滚的#个事务。
5.过去重启事务的次数
•回滚长度:选择要中止的受害者事务后,DBMS还可以决定回滚事务的更改的距离。可以是整个事务,也可以是足够的操作(部分事务)足以来打破僵局


image.png

死锁预防

当txn尝试获取另一个txn持有的锁时,DBMS会杀死其中一个以防止死锁。
该方法不需要wait-for图或检测算法。

根据时间戳分配优先级(例如,旧的意味着更高的优先级)。
这些方案保证没有死锁,因为在等待锁时只允许一个方向。 当事务重新启动时,其(新)优先级是其旧时间戳。
•Wait-Die(“Old等待Young”):如果T1具有更高的优先级,则T1等待T2。 否则T1中止
•wound-wait(“Young等待old”):如果T1具有更高的优先级,则T2中止。 否则T1会等待。

关于死锁检测 和 死锁预防,把作业搞懂 应该就没啥问题了。
https://15445.courses.cs.cmu.edu/fall2018/files/hw4-sols.pdf

粒度锁

如果一个事务要更新十亿个元组,它必须向DBMS的锁管理器询问十亿个锁。
这将是缓慢的,因为我们必须在锁管理器的内部锁表数据结构中获取锁存器。

相反,我们希望使用锁层次结构,允许事务在系统中采用更粗粒度的锁。 为此层次结构中的某些内容获取锁定会隐式获取其所有子项的锁定。

意图锁定允许更高级别的节点以共享或独占模式锁定,而无需检查所有后代节点。 如果节点处于意图模式,则在较低级别进行显式锁定。

•Intention-Shared(IS):表示使用共享锁在较低级别显式锁定。
•Intention-Exclusive(IX):表示使用独占锁或共享锁在较低级别显式锁定。
•Shared + Intention-Exclusive(SIX):以该节点为根的子树在共享模式下显式锁定,显式锁定在低级别使用独占模式锁定。


image.png
image.png
image.png

image.png

image.png

同样把作业里的QUESTION 3理解清楚就搞清楚这个了。

总结

应用程序通常不会手动设置锁。 但有时它可以为DBMS提供一些提示来帮助它提高并发性:
SELECT ... FOR UPDATE:执行选择,然后在获取的元组上设置独占锁
2PL几乎用于所有DBMS。 它自动提供正确的交错事务操作。
但它必须能够应对死锁的问题。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容