MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
12
返回列表 发新帖
楼主: yinshi
打印 上一主题 下一主题

[事务及锁] 通过一个实例说明高并发条件下,合理使用innodb的锁机制解决问题

[复制链接]
16#
 楼主| 发表于 2009-11-1 13:17:39 | 只看该作者
为验证这个解决方案,只实现第1点。同样出现
update t_sellticket,t_tmpsellticket
set t_sellticket.used=1
where t_sellticket.pool=t_tmpsellticket.pool and t_sellticket.ticketid=t_tmpsellticket.ticketid;
死锁的情况。
17#
 楼主| 发表于 2009-11-1 13:25:30 | 只看该作者
这是因为sellticket非簇索引、和簇索引互相等待导致的死锁情况,于是老老实实实现第二点,问题解决。
在若干个节点同时运行情况下,售票效率可以通过增加主机实现了提高售票能力。
18#
 楼主| 发表于 2009-11-1 13:26:11 | 只看该作者
未来瓶颈来自存储和网络带宽
19#
 楼主| 发表于 2009-11-1 13:32:19 | 只看该作者
最终版本:
createt definner='root'@'loclahost' procedure 'sp_getpresellticket'(in startno int,in endno int)
begin

insert into t_tmpsellticket(pool,ticketid,maxid) select pool,tocketid,
cast(concat(cast(pool as BINARY),cast(ticketid as BINARY)) as signed)
from t_sellticket
where id>=startno and id<=endno;

select ticketid
from t_tmpsellticket
where maxid=startno;
end $$
delimiter;
20#
发表于 2016-9-5 10:06:58 | 只看该作者
有些看不明白怎么产生的死锁,两个过程都要锁定簇索引,也就是说innodb是一行行进行加锁的吗,这样才导致两边事务各自占了一部分行锁,无法完全锁定吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-4-29 05:27 , Processed in 0.067969 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表