mysql的InnoDB行锁的一点反思-创新互联
刚参加工作时,遇到的mysql死锁的问题。具体情况如下:
创新互联是一家集网站建设,大关企业网站建设,大关品牌网站建设,网站定制,大关网站建设报价,网络营销,网络优化,大关网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。网页有个统计访问次数功能,然后这个次数num是int类型,网页每次被访问一次就增1,然后运营在跑批量任务的时候,造成数据量这个字段死锁了。然后DBA就查询造成死锁的原因,最后发现是我的代码造成的死锁,然后这个锅,我接下了。这个问题怎么解决的,我一直没有察觉到,因为他们没有要求修改代码。后来我一直在思考这个问题,具体是什么原因引起的死锁。由于无法重现当时的应用场景和各种服务配置,我也无法深究这个问题。后来只能认真的研究mysql的锁和java的并发控制。
N久没有动笔写文字了,表达还是有点问题,等我理清思路后,再详细写写这方面的文字,今天就简单的写一下mysql关于innoDb行锁要注意的两个地方,还有其他很多需要的地方,这里只简单记录一下,只能叫简单记录。
先说一下,innoDB行锁的现实方式,它是通过给索引上的索引项加锁来实现的。这就决定了行级锁使用的前提是通过索引条件检索数据,否则,innoDB将使用表级锁。第二点要说的即使在条件中使用了索引字段,但是是否使用索引来检索数据是由mysql通过判断不同执行计划的代价来决定的,如果mysql任务全表扫描效率更高,它就不会使用索引,这种情况下innoDB将使用表锁,而不是行锁。所以在分析mysql的锁问题时,有时候需要使用explain来检查SQL的执行计划。
网站名称:mysql的InnoDB行锁的一点反思-创新互联
分享URL:http://scgulin.cn/article/cegjep.html