yinshi 发表于 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;
死锁的情况。

yinshi 发表于 2009-11-1 13:25:30

这是因为sellticket非簇索引、和簇索引互相等待导致的死锁情况,于是老老实实实现第二点,问题解决。
在若干个节点同时运行情况下,售票效率可以通过增加主机实现了提高售票能力。

yinshi 发表于 2009-11-1 13:26:11

未来瓶颈来自存储和网络带宽

yinshi 发表于 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;

kidd的诡计 发表于 2016-9-5 10:06:58

有些看不明白怎么产生的死锁,两个过程都要锁定簇索引,也就是说innodb是一行行进行加锁的吗,这样才导致两边事务各自占了一部分行锁,无法完全锁定吗

a_long_river 发表于 2017-8-7 10:58:52

not bad.
页: 1 [2]
查看完整版本: 通过一个实例说明高并发条件下,合理使用innodb的锁机制解决问题