美文网首页MySQL锁首页推荐干货在这里
mysql锁(四)myisam下锁的介绍和实践三

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

作者: b12af9baadf4 | 来源:发表于2016-09-14 17:17 被阅读293次

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


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


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

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


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


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

    相关文章

      网友评论

        本文标题:mysql锁(四)myisam下锁的介绍和实践三

        本文链接:https://www.haomeiwen.com/subject/xfwvettx.html