zoukankan      html  css  js  c++  java
  • mysql读写锁状态分析

    表锁

    命令:show status like 'table%';

    Table_locks_immediate:产生表级锁定的次数,表示可以立即获取锁的查询次数,每立即获取锁值加1

    Table_locks_waited:出现表级锁定争用而发生等待的次数(不能立即获取锁的次数,每等待一次锁值加1),此值高则说明存在着较严重的表级锁争用情况;

     表锁偏向于MYISAM引擎

    MYISAM的读写锁调度时写优先的,这也是MYISAM不适合做写为主表的引擎。因为写锁后,其他线程不能做任何操作,大量的更新会使查询很难得到锁,从而造成永远的阻塞。

     ***************************************************************************************************************************************

    查看数据库的隔离级别

    show variables like 'tx_isolation';

    行锁:

    行锁偏向INNODB引擎,开销大,加锁慢;会出现死锁;锁粒度最小,发生锁冲突的概率最低,并发度也最高。

    *****************************************************************************************************************************************

    应该尽量避免:

    索引失效的时候,行锁变为表锁

    间隙锁的产生

    【什么是间隙锁】
    当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键
    值在条件范围内但并不存在的记录,叫做“间隙(GAP)”,
    InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁(Next-Key锁)。
    【危害】
    因为Query执行过程中通过过范围查找的话,他会锁定整个范围内所有的索引键值,即使这个_值并不存在。
    间隙锁有一个比较致命的弱点,就是当锁定一个范围键值之后,即使某些不存在的键值也会被无辜的锁定,而造成在锁定的时候无
    法插入锁定键值范围内的任何数据。在某些场景下这可能会对性能造成很大的危害

    ****************************************************************************************************************

    行锁总结

    show status like 'innodb_row_lock%';

    对各个状态说明如下:

    Innodb_row_lock_current_waits:     --当前正在等待锁定的数量;

    Innodb_row_lock_time          --从系统启动到现在锁定总时间长度;

    Innodb_row_lock_time_avg        --每次等待所花的平均时间;

    Innodb_row_lock_time_max       --从系统启动到现在等待最长的一次所花的时间 

    Innodb_row_lock_waits         --系统启动后到现在总共等待的次数

      

  • 相关阅读:
    Cocos2d-x3.0游戏实例之《别救我》第四篇——乱入的主角
    TRIZ系列-创新原理-21-高速通过原理
    “cvSnakeImage”: 找不到标识符
    21世纪创业与知识之间的辩证关系
    Android导航栏ActionBar的具体分析
    HDU4565 && 2013年长沙邀请赛A题
    从切比雪夫不等式到大数定理
    在线笔试琐碎
    在线笔试琐碎
    算法求解中的变量、数组与数据结构(STL 中的容器)
  • 原文地址:https://www.cnblogs.com/yibao/p/13946048.html
Copyright © 2011-2022 走看看