作家
登录

MySQL的两阶段加锁协议

作者: 来源: 2017-08-31 10:39:21 阅读 我要评论

tps应当理论上可以或许晋升3rt/rt=3倍。这还仅仅是营业就只有三条SQL的情况下,

多一条sql就多一次rt,就多一倍的时光。

在更新到数据库的那个时光点才算锁成功

提交到数据库的时刻才算解锁成功

值得留意的是:

这两个round_trip的前半段是不管帐算在内的

如下图所示:

当前只推敲收集时延,不推敲数据库和应用本身的时光消费。 ##根据S2PL的机能优化

在事务中只有提交(commit)或者回滚(rollback)时才是解锁阶段,

放到事务最后,如许可以明显的进步吞吐量。更进一步:

越热点记录离事务的终点越近(无论是commit照样rollback)

笔者认为,先后次序如下图:

其余时光为加锁阶段。

###避免逝世锁这也是任何SQL加锁弗成避免的。上文提到了按照记录Key的热度在事务中倒序分列。那么写代码的时刻任何可能并发的SQL都必须按照这种次序来处理,不然会造成逝世锁。如下图所示:

###select for update和update where 谓词计算我们可以直接将一些简单的断定逻辑写到update的谓词琅绫擎,以削减加锁时光,推敲下面两种筹划:

筹划1:

  1. begin
  2.  int count = select count from t_inventory for update
  3.  if count >= 5: 
  4.     update t_inventory set count=count-5 where id =123 
  5.     commit  
  6.  else 
  7.     rollback  

筹划2:

  1. begin
  2.     int rows = update t_inventory set count=count-5 where id =123 and count >=5 
  3.     if rows > 0: 
  4.         commit
  5.     ele  
  6.         rollback 

时延如下图所示:

可以看到,经由过程在update中加谓词计算,少了1rt的时光。

因为update在履行过程中对相符谓词前提的记录加的是和select for update一致的排它锁

#总结 MySql采取两阶段加锁协定实现隔离性和一致性,我们只有深刻的去懂得这种协定,才能更好的对我们的SQL进行优化,增长体系的吞吐量。

因为库存往往是最重要的热点,是全部体系的瓶颈。那么如不雅采取第二种筹划的话,

【编辑推荐】

  1. 数据库事务系列-MySQL跨行事务模型
  2. 五个小技能告诉你若何保护MySQL数据仓库
  3. MySQL高可用数据库内核深度优化的四重定制
  4. MySQL进行WordStr操作时造成数据损掉——那些坑你踩了吗?
  5. 若何懂得并精确应用MySql索引
【义务编辑:庞桂玉 TEL:(010)68476606】

  推荐阅读

  Linux程序设计的一些优化措施

这些常识是在平常的浏览中,零碎的获得的,本身总结了一下,分享在这里全局变量VS函数参数i=i+1; i++; i--; 这三个语句都平日引用在for()或者是while()里边,大年夜履行效力上来说 3》2》1这和最毕生成的汇编说话有>>>详细阅读


本文标题:MySQL的两阶段加锁协议

地址:http://www.17bianji.com/lsqh/37039.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)