2012-02-09

MySql数据库锁表的问题:

业务数据表中,有一个数据的备份表T1的数据库引擎是MyISAM,同时有两个业务使用到这个表:

业务A:select和update此业务表备份表T1

业务B:将业务表T2中的数据insert到业务表备份表T1中,然后删除业务表T2中前一天的数据

业务C:将业务数据写入到业务表T2中

业务A执行,需要T1的读写锁

业务B执行,需要T2的读写锁和T1的写锁

业务C执行,需要T2的写锁

业务A先执行,业务B和C后执行,在业务B执行的时候,业务A还在执行,导致业务B处于等待状态,同时业务B获得了T2的

读锁,现在业务C无法获得T2的写锁,业务C处于获取写锁的等待队列!

在某个时间点,业务A执行完毕,业务B获得T1的写锁,将T2表中的数据读出,写入到T1表中,但是业务B一直无法获得T2

表的写锁,导致删除T2中前一天的数据的操作一直处于等待状态,直到Kill掉业务C,业务B才能顺利的执行下去。

大概事实就是这样,现在有一个问题:

业务C怎么会一直占有T2的写锁?抑或我的分析有问题?请大拿指导!

猜你喜欢

转载自songkewei110.iteye.com/blog/1401935