mysql锁(四)myisam下锁的介绍和实践三

****MYISAM存储引擎下读锁和写锁是互斥的****
MYISAM存储引擎下读锁和写锁是互斥的,即当两个请求同时到达的情况下,一个申请写锁,一个申请读锁,MYISAM存储引擎只能设置写锁或者读锁,不能既设置写锁又设置读锁。

****MYISAM存储引擎下写锁的优先级比较高****
缺省的情况下,同一时间点上,同时到达两个进程,分别申请读锁和写锁的情况,MYSQL会优先给写锁。
而且,如果读请求先到锁等待队列里面排队,写请求后到锁等待队列的话,也是优先给写锁,写锁处理完毕才给读锁。这是缺省情况下,mysql认为写比读更重要,所以做出的这种分配机制。

接下来我们尝试自己去观察下,事实是不是这样的吧?

A窗口先运行一个时间比较长的update操作,然后立即去执行B窗口的select操作,然后立即再去C窗口执行update操作。(A窗口运行的时候,B窗口的select先进入锁等待队列,C窗口的update后进入锁等待队列,观察在锁等待队列中select 先到,update后到的情况下,谁先执行?)

《mysql锁(四)myisam下锁的介绍和实践三》

由图中我们可以看到,在进入锁等待队列时,select先到队列等待的但却是最后执行的,update后到队列但却是先执行的,因此,可以说明,myisam 下默认对写的优先级比较高。

****适用的场景****
Myisam引擎这种缺省情况下的机制,会有一个比较严重的问题,那就是对于大量的更新和查询操作的应用,因为写操作的优先级大于读操作,那就可能造成读锁很难获得读锁,一直阻塞在那边,直到写操作执行完毕,因此,myisam表只适合读多写少的情况下。

    原文作者:xdd_mdd
    原文地址: https://www.jianshu.com/p/523afd325ca6
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞