一个MySQL死锁问题的解决
PS本人个人情况:
因为我们用的是jbpm4,在100个并发测试下导致数据库死锁,jbpm4封装了插入数据库的操作,jbpm4用得是hibernate对数据库操作,对session的处理貌似没有处理并发的情况,我怀疑是否是这个原因,暂时怀疑,还未深究,我暂时对我们的方法加上synchronized,可以避免数据库死锁,也在寻找更好的解决办法。以下转载是我寻找死锁原因的时候,找到的文章,作为一个知识点留作备用,希望大牛们有更好的解决办法,赐教给小弟。
以下为转载:
http://bbs.chinaunix.net/thread-1854828-1-1.html
近在项目开发过程中,碰到了数据库的死锁问题,在解决问题的过程中,加深了对MySQL InnoDB引擎锁机制的理解。
我们使用Show innodb status检查引擎状态时,发现了死锁问题:*** (1) TRANSACTION:TRANSACTION 0 677833455, ACTIVE 0 sec, process no 11393, OS thread id 278546 starting index readmysql tables in use 1, locked 1LOCK WAIT 3 lock struct(s), heap size 320MySQL thread id 83, query id 162348740 dcnet03 dcnet Searching rows for updateupdate TSK_TASK set STATUS_ID=1064,UPDATE_TIME=now () where STATUS_ID=1061 and MON_TIME<date_sub(now(), INTERVAL 30 minute)*** (1) WAITING FOR THIS LOCK TO BE GRANTED:RECORD LOCKS space id 0 page no 849384 n bits 208 index `PRIMARY` of table `dcnet_db/TSK_TASK` trx id 0 677833455 lock_mode X locks rec but not gap waiting