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;
页: 1 [2]
查看完整版本: 通过一个实例说明高并发条件下,合理使用innodb的锁机制解决问题