数据库中的并发

简介

所谓并发操作,是指在多用户共享系统中,许多用户可能同时对同一数据进行操作。

并发操作带来的问题是数据的不一致性,主要有三类:丢失更新、不可重复读和读脏数据。主要原因是事务的并发操作破坏了事务的隔离性。DBMS的并发控制子系统负责协调并发事务的执行,保证数据库的完整性不受破坏,避免用户得到不正确的数据。

并发操作带来的问题

并发操作带来的数据不一致性有三类:丢失更新、不可重复读和读脏数据,如下图:

Concurrency Example
  1. 丢失更新

    如上图第一种情况所示,事务T1和T2都在对数据A做加一操作,事务T1在t5时刻将修改后的A值写入数据库。但是事务T2在T6时刻把它对A加一之后的值16写入了数据库。两个事务对A的加一操作都执行成功,但A的值实际只增加了1,丢失了一次对数据的更新。原因就在于T1对数据库的修改被T2事务覆盖而丢失了,破坏了事务的隔离性。

  2. 不可重复读

    如图中第二种情况所示,事务T1读取A、B的值后进行运算,事务T2修改了B的值并在t6时刻写入了数据库。之后事务T1又重新对之前的运算进行验算,得到了和之前不一样的结果,导致验算失败。这同样也是事务T2干扰了事务T1的独立性。

  3. 读脏数据

    如图中第三种情况所示,事务T1对数据C修改之后,在t4时刻事务T2读取修改后的C值进行相关的操作,然后事务T1回滚,C恢复了原来的值,事务T2对C做的操作是无效的,它读到的是C在无效状态下的值。

并发控制技术

在事务并行处理的过程中对相同的数据进行访问,导致了数据的不一致性。解决问题的方法可以从保证事务的隔离性入手。

封锁

并发控制的主要技术是封锁,基本的封锁类型有排它锁(简称X锁或写锁)和共享锁(简称S锁或读锁)。下面分别进行介绍:

  1. 排它锁

    若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它事务都不能再对A加任何类型的锁,直到T释放A上的锁。

  2. 共享锁

    若事务T对数据对象A加上了S锁,则只允许T读取A,但不能修改A,其它事务只能再对A加S锁,直到T释放A上的S锁。这样,可以保证其它事务可以读A,但在T释放A上的S锁之前不能对A进行任何修改。

三级封锁协议

和封锁相关的还有三级封锁协议:

  1. 一级封锁协议

    事务在修改数据A之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(Commit)和非正常结束(Rollback)。一级封锁协议可以解决丢失更新的问题。

  2. 二级封锁协议

    在记忆封锁协议的基础之上,加上事务T在读数据A之前必须先对其加S锁,读完之后即可释放S锁。二级封锁协议可以解决读脏数据的问题。但是,由于二级封锁协议读完了数据之后即可释放S锁,在没有加S锁的间隙(见上图中的第二种情况),数据有可能被其它事务修改,所以不能保证可重复读。

  3. 三级封锁协议

    在一级封锁协议的基础上,加上事务T在读数据A之前必须先对其加上S锁,直到事务结束才释放S锁。三级封锁协议除了防止读脏数据和丢失修改之外,还进一步防止了不可重复读。

相关概念

死锁和活锁

  • 活锁

    活锁是指当事务T1封锁了数据A,事务T2请求封锁数据A,于是T2等待,当T1释放了A上的封锁之后,系统首先批准了T3对A的封锁请求,于是T2仍等待,当T3释放了A上的封锁之后,系统又批准了T4的封锁请求,以此类推,使得T2可能永远等待的现象。

  • 死锁

    死锁是指两个以上的事务分别请求封锁对方已经封锁的数据,导致长期等待而无法继续运行下去的现象。

并发调度的可串行性

多个事务的并发执行时正确的,当且仅当其结果与以某一次序串行地执行它们时的结果相同,称这种调度策略是可串行化的调度。

可串行性是并发事务正确性的准则,按照这个准则规定,一个给定的并发调度,当且仅当它是可串行化的才认为是正确调度。

两段封锁协议

两段封锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。即事务分为两个阶段,第一阶段是获得封锁,事务可以获得任何数据项上的任何类型的锁,但不能释放;第二阶段是释放封锁,事务可以释放任何数据项上的任何类型的锁,但是不能申请加锁。

封锁的粒度

封锁对象的大小称为封锁的粒度。封锁的对象可以是逻辑单元(如属性、元组、关系、索引项、整个索引乃至整个数据库),也可以是物理单元(如数据页或者索引页)。

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

推荐阅读更多精彩内容