首页 > 数据库技术 > 详细

mysql排他锁遇到的一个问题 小记

时间:2015-06-29 22:12:38      阅读:247      评论:0      收藏:0      [点我收藏+]

mysql版本:5.5.34

在使用select for update来加锁的时候,遇到间隙锁,锁住了整个表的情况(本来应该是只锁住部分范围行)。

具体如:

delivery_id createtime
1 100
2 101
3 102
4 103

session1:

select delivery_id from table where createtime>102 for update;

session2:

select delivery_id from table where createtime<102 for update;(此时需要等待锁释放)

createtime字段是有索引的。

按理说这里是不用等待锁的。之前我有试过,但是环境可能不同(当时mysql的版本和具体的配置环境可能有所不同)。

后来网上说把数据量增大试试,然后我把数据增到5000行还是不行。发现问题在于我生成的记录中createtime的离散率太低,只有一条是100,101,102,其他都是103。后来重新生成数据把createtime随机生成。再试,这时候就正常的。

有人说是数据量少,mysql的执行计划会选择全表扫描,但是我用explain查看是有用到索引的。

第一次数据量增大到5000后估计也是执行计划选择的问题。

 

mysql排他锁遇到的一个问题 小记

原文:http://www.cnblogs.com/do-think/p/4608845.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!