Mysql中的锁

MySql的锁定机制

锁的分类

Mysql中的锁,根据锁住的粒度不同,分为三种类型。

行级锁定(row-level)

行级锁定,顾名思义就是对数据的一行进行锁定,这样的锁粒度最小,自然带来了最高的并发处理性能,但是针对行的锁,同样意味着,当并发数量大的时候,会产生大量的锁,这个时候锁的性能开销会占用较多的系统资源,降低整个系统的性能。具体来说就是,当锁粒度小的时候,每次获取和释放锁所需要做的事情就越多,带来的消耗也就越大。此外,过多的锁也更容易造成死锁的问题。

表级锁定(table-level)

与行级锁相反,表级锁定是最大粒度的锁定机制,该锁定机制正如他的名字一样,是对整个表的锁定,所以产生的锁是最少的,且由于是对整个表的锁定,所以可以很好的规避死锁问题。不过粒度大带来的问题,自然是因为锁资源在高并发的情况下,竞争激烈,并发程度大打折扣。

页级锁定 (page-level)

页级锁定是Mysql中比较独有的一种锁定级别,页级锁定是介于表级锁定和行级锁定之间的,不过很可惜,页级锁定依旧会有死锁问题,

锁定类型

mysql的内部实现中更有多达11种的锁定类型,由系统中的一个枚举量(thr_lock_type)定义,各个值的描述如下

锁定类型 说明
ignore 当发生锁请求的时候,内部交互使用,在锁定结果和队列中不会有任何信息存储
unlock 释放锁清秋的交互用锁类型
read 普通读锁定
write 普通写锁定
read_with_shared_locks 在 Innodb引擎中使用到,select ... lockin shared mode会使用该锁
read_high_priority 高优先级读锁定
read_no_insert 不允许并发插入(ConcurentInsert)的锁定
write_allow_write 当由存储引擎自行处理锁定的时候,mysqld允许其他的线程再获取读或者写锁定,因为即使资源冲突,存储引擎自己也会知道怎么来处理
write_allow_read 这种锁定发生在对表做DDL(ALTERTABLE...)的时候,MySQL可以允许其他线程获取读锁定,因为MySQL是通过重建整个表然后再RENAME而实现的该功能,所在整个过程原表仍然可以提供读服务
write_concurrent_insert 正在进行ConcurentInsert时候所使用的锁定方式,该锁定进行的时候,除了READ_NO_INSERT之外的其他任何读锁定请求都不会被阻塞
write_delayed 在使用INSERTDELAYED时候的锁定类型
write_low_priority 显示声明的低级别锁定方式,通过设置LOW_PRIORITY_UPDAT=1而产生
write_only 当操作过程中某个锁定异常中断之后系统内部需要进行closetable操作,在这个过程中出现的锁定类型就是write_only

表级锁定

MySql的表级锁定分为两种,读和写。在MySql中,用四个队列来维护这两种锁定:两个存放当前正在锁定中的读和写锁定信息,另外两个存放等待中的读写锁定信息。

  • Curent read-lock queue (lock->read)
  • Pending read-lock queue (lock->read_wait)
  • Current write-lock queue (lock->write)
  • Pending write-lock queue (lock->write_wait)
    当前持有读锁的所有线程的相关信息都能在Current read-lock queue 中找到,队列中的信息按照获取到所得时间存放,而正在等待锁定资源的信息则存放在Pending read-lock queue中。另外两个同理相似。

读锁定

当一个新的客户端请求申请获取读锁定资源的时候,会有如下流程

mysql获取读锁资源流程图.png

获取读锁定资源,必须要满足当前资源没有被写锁定,并且写锁定等待队列中没有更高优先级的写锁定的时候,才能获取资源,否则都要进入等待队列。

写锁定

写锁定比较复杂,会经历如下的流程

mysql获取写锁定流程图.png

读请求和写等待队列中的优先级规则

  1. 除了READ_HIGH_PRIORITY的读锁定之外,Pendingwrite-lockqueue中的WRITE写锁定能够阻塞所有其他的读锁定;

  2. READ_HIGH_PRIORITY读锁定的请求能够阻塞所有Pendingwrite-lockqueue中的写锁定;

  3. 除了WRITE写锁定之外,Pendingwrite-lockqueue中的其他任何写锁定都比读锁定的优先级低。

http://www.cnblogs.com/ggjucheng/archive/2012/11/14/2770445.html

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

推荐阅读更多精彩内容