mysql dead lock issue -- help needed

"Ashish Raikwar" <[email protected]> Mon, 20 Oct 2008 21:35:31 +0530
Newsgroups gmane.comp.db.mysql.java
Message-ID <[email protected]>
Hi All
I am working on RHEL4 platform with Mysql vesion 5.0.27 and
mysql connector  version 5.0.4

We are using hibernate3 + c3p0-0.9.1 for database manipulation.

at times of heavy load on database we have seen
MySQLTransactionRollbackException in my application logs.

I found a link
http://bugs.mysql.com/bug.php?id=18719

that says we can reproduce the same problem
when we do a lot of database activity in multi threaded environment.

I tried to reproduce the problem with a test program but I am not able to
reproduce the same dead lock exception.

can some body help me in this ???

below is the stack trace when I got that dead lock exception in my
application :

org.hibernate.exception.LockAcquisitionException: could not insert:
[com.tejas.nms.common.hibernate.persistence.AlarmPO]
        at
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:82)
        at
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
        at
org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40)
        at
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2158)
        at
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2638)
        at
org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:48)
        at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
        at
org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298)
        at
org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
        at
org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
        at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
        at
org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
        at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
        at
org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
        at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
        at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
        at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
        at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
        at
com.tejas.nms.common.dao.NmsGenericDAO.insert(NmsGenericDAO.java:249)
        at
com.tejas.nms.server.messaging.listener.AlarmMessageListener.handleObjectCreation(AlarmMessageListener.java:78)
        at
com.tejas.nms.server.messaging.AbstractMessageListener.processMessage(AbstractMessageListener.java:162)
        at
com.tejas.nms.server.messaging.AbstractMessageListener.onMessage(AbstractMessageListener.java:136)
        at
org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:854)
        at
org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:99)
        at
org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:166)
        at
org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:117)
        at
org.apache.activemq.thread.PooledTaskRunner.access$100(PooledTaskRunner.java:26)
        at
org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:44)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
        at java.lang.Thread.run(Thread.java:619)
Caused by: com.mysql.jdbc.exceptions.MySQLTransactionRollbackException:
Deadlock found when trying to get lock; try restarting transaction
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:941)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
        at
com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1169)
        at
com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:693)
        at
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1404)
        at
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1318)
        at
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1303)
        at
com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
        at
org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73)
        at
org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33)
        ... 28 more

        at
com.tejas.nms.common.dao.NmsGenericDAO.insert(NmsGenericDAO.java:253)
        at
com.tejas.nms.server.messaging.listener.AlarmMessageListener.handleObjectCreation(AlarmMessageListener.java:78)
         at
com.tejas.nms.server.messaging.AbstractMessageListener.processMessage(AbstractMessageListener.java:162)
        at
com.tejas.nms.server.messaging.AbstractMessageListener.onMessage(AbstractMessageListener.java:136)
        at
org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:854)
        at
org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:99)
        at
org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:166)
        at
org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:117)
        at
org.apache.activemq.thread.PooledTaskRunner.access$100(PooledTaskRunner.java:26)
        at
org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:44)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
        at java.lang.Thread.run(Thread.java:619)

        at
com.tejas.nms.server.messaging.listener.AlarmMessageListener.handleObjectCreation(AlarmMessageListener.java:94)
        at
com.tejas.nms.server.messaging.AbstractMessageListener.processMessage(AbstractMessageListener.java:162)
        at
com.tejas.nms.server.messaging.AbstractMessageListener.onMessage(AbstractMessageListener.java:136)
        at
org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:854)
        at
org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:99)
        at
org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:166)
        at
org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:117)
        at
org.apache.activemq.thread.PooledTaskRunner.access$100(PooledTaskRunner.java:26)
        at
org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:44)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
        at java.lang.Thread.run(Thread.java:619)
org.hibernate.AssertionFailure: null id in
com.tejas.nms.common.hibernate.persistence.AlarmPO entry (don't flush the
Session after an exception occurs)
        at
org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:55)
        at
org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:157)
        at
org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:113)
        at
org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:196)
        at
org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)
        at
org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
        at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
        at
org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
        at
com.tejas.nms.server.application.discovery.EmsDiscoveryTransactionCommand.commitTransaction(EmsDiscoveryTransactionCommand.java:101)
        at
com.tejas.nms.server.application.discovery.EmsDiscoveryTransactionCommand.execute(EmsDiscoveryTransactionCommand.java:61)
        at
com.tejas.nms.common.transaction.TransactionContainer$TransactionTask.call(TransactionContainer.java:314)
        at
com.tejas.nms.common.transaction.TransactionContainer$TransactionTask.call(TransactionContainer.java:305)
        at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
        at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
        at java.lang.Thread.run(Thread.java:619)



Thanks and Regards
--------------------------
Ashish