javaee论坛

普通会员

225649

帖子

65

回复

79

积分

楼主
发表于 2019-11-14 08:57:23 | 查看: 39 | 回复: 0

1、特定:

   偏向MyISAM存储,开销小,加锁快,无死锁,锁粒度大,发送锁冲突的概率最高,并发最低。

2、加读写锁

   可以手动增加表锁locktable表名read(write),表名2read(write) 

   查看表上加过的锁 showopentables。  in_use列是1表示加锁

    加读锁

    

   

加写锁 

 

 

 

3、案例结论 

4、表锁分析

   查看那些表被加锁了  showopentables;

   如何分析表锁定:

   可以通过检查table_locks_waited和table_locks_immediate状态来分析表锁定

    

 

行锁

  特点:

  Innodeb存储,开销大,加锁慢,会出现死锁,锁定粒度小,发生锁冲突的概率低,并发度也不高。与myisam最大的不同有两点:一是支持事务。行锁支持事务(事务知识复习)

案例分析

    行锁演示

    

    索引失效行锁升级为表锁

    如表中b字段是varcher类型的索引,where中根据b搜索么有加引号,索引失效,会使行锁变位表锁

    间隙所危害

    

    【危害】 

    因为Query执行过程中通过范围查找的话,它会锁定这个范围内的所有索引键值,即使这个键值不存在,间隙锁在这个范围   内的数据不存在的是无辜的也会被锁定,可能位有很大危害。

 如何锁定一行

select*fromtableNamewherea=1forupdate

  forupdate锁住一行数据后其他操作会被阻塞,直到锁定行被提交commit 

总结

  innodb存储引擎由于实现了行级锁定,虽然在锁定机制的实现方面带来的性能损耗可能比表锁更高点,但是在整体并发数据方面更好

行锁分析

  优化建议

 

 

 

 

 

 

 

 

 


您需要登录后才可以回帖 登录 | 立即注册

触屏版| 电脑版

技术支持 历史网 V2.0 © 2016-2017