Sorry, I am using Derby 10.5.3.0

Thanks
Jon

On 26/03/2010 13:49, Jon Pearson wrote:

I am seeing a deadlock while running a statistics update .

It appears that each operation has a ROW lock which the other wants.

Any advice on how to avoid this?

I've enclosed the deadlock trace below:

2010-03-25 05:06:44,647 ERROR:AlertProcessor: AlertProcessor
org.springframework.dao.DeadlockLoserDataAccessException: PreparedStatementCallback; SQL [DELETE FROM USER_DOMAIN_ALERT WHERE ALERT_HANDLE=? ]; A lock could not be obtained due to a deadlock, cycle of locks and waiters is:
Lock : ROW, SYSSTATISTICS, (8,2408)
Waiting XID : {271568763, S} , EMNOC, DELETE FROM USER_DOMAIN_ALERT WHERE ALERT_HANDLE=?
  Granted XID : {271568697, X}
Lock : ROW, SYSSTATISTICS, (11,2006)
Waiting XID : {271568697, X} , EMNOC, alter table "EMNOC20"."USER_DOMAIN_ALERT" all update statistics
  Granted XID : {271568763, S}
. The selected victim is XID : 271568763.; nested exception is java.sql.SQLTransactionRollbackException: A lock could not be obtained due to a deadlock, cycle of locks and waiters is:
Lock : ROW, SYSSTATISTICS, (8,2408)
Waiting XID : {271568763, S} , EMNOC, DELETE FROM USER_DOMAIN_ALERT WHERE ALERT_HANDLE=?
  Granted XID : {271568697, X}
Lock : ROW, SYSSTATISTICS, (11,2006)
Waiting XID : {271568697, X} , EMNOC, alter table "EMNOC20"."USER_DOMAIN_ALERT" all update statistics
  Granted XID : {271568763, S}
. The selected victim is XID : 271568763.
Caused by:
java.sql.SQLTransactionRollbackException: A lock could not be obtained due to a deadlock, cycle of locks and waiters is:
Lock : ROW, SYSSTATISTICS, (8,2408)
Waiting XID : {271568763, S} , EMNOC, DELETE FROM USER_DOMAIN_ALERT WHERE ALERT_HANDLE=?
  Granted XID : {271568697, X}
Lock : ROW, SYSSTATISTICS, (11,2006)
Waiting XID : {271568697, X} , EMNOC, alter table "EMNOC20"."USER_DOMAIN_ALERT" all update statistics
  Granted XID : {271568763, S}
. The selected victim is XID : 271568763.
at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source) at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source) at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source) at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown Source) at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown Source) at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(Unknown Source) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102) at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:745) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:538) at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:739) at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:797) at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:805)
    at com.emnico.emnoc.generated.a.C.b(DBUserDomainAlert.java:72)
    at com.emnico.emnoc.c.a.b(AlertProcessor.java:1118)
    at com.emnico.emnoc.c.a.c(AlertProcessor.java:1078)
    at com.emnico.emnoc.c.a.run(AlertProcessor.java:1492)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: A lock could not be obtained due to a deadlock, cycle of locks and waiters is:
Lock : ROW, SYSSTATISTICS, (8,2408)
Waiting XID : {271568763, S} , EMNOC, DELETE FROM USER_DOMAIN_ALERT WHERE ALERT_HANDLE=?
  Granted XID : {271568697, X}
Lock : ROW, SYSSTATISTICS, (11,2006)
Waiting XID : {271568697, X} , EMNOC, alter table "EMNOC20"."USER_DOMAIN_ALERT" all update statistics
  Granted XID : {271568763, S}
. The selected victim is XID : 271568763.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source)
    ... 21 more
Caused by: ERROR 40001: A lock could not be obtained due to a deadlock, cycle of locks and waiters is:
Lock : ROW, SYSSTATISTICS, (8,2408)
Waiting XID : {271568763, S} , EMNOC, DELETE FROM USER_DOMAIN_ALERT WHERE ALERT_HANDLE=?
  Granted XID : {271568697, X}
Lock : ROW, SYSSTATISTICS, (11,2006)
Waiting XID : {271568697, X} , EMNOC, alter table "EMNOC20"."USER_DOMAIN_ALERT" all update statistics
  Granted XID : {271568763, S}
. The selected victim is XID : 271568763.
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) at org.apache.derby.impl.services.locks.Deadlock.buildException(Unknown Source) at org.apache.derby.impl.services.locks.ConcurrentLockSet.lockObject(Unknown Source) at org.apache.derby.impl.services.locks.AbstractPool.lockObject(Unknown Source) at org.apache.derby.impl.store.raw.xact.RowLocking3.lockRecordForRead(Unknown Source) at org.apache.derby.impl.store.access.heap.HeapController.lockRow(Unknown Source) at org.apache.derby.impl.store.access.heap.HeapController.lockRow(Unknown Source) at org.apache.derby.impl.store.access.btree.index.B2IRowLocking3.lockRowOnPage(Unknown Source) at org.apache.derby.impl.store.access.btree.index.B2IRowLocking3._lockScanRow(Unknown Source) at org.apache.derby.impl.store.access.btree.index.B2IRowLockingRR.lockScanRow(Unknown Source) at org.apache.derby.impl.store.access.btree.BTreeForwardScan.fetchRows(Unknown Source) at org.apache.derby.impl.store.access.btree.BTreeScan.fetchNext(Unknown Source) at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getDescriptorViaIndexMinion(Unknown Source) at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getDescriptorViaIndex(Unknown Source) at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getStatisticsDescriptors(Unknown Source) at org.apache.derby.iapi.sql.dictionary.TableDescriptor.getStatistics(Unknown Source) at org.apache.derby.iapi.sql.dictionary.TableDescriptor.statisticsExist(Unknown Source) at org.apache.derby.impl.sql.compile.FromBaseTable.estimateCost(Unknown Source) at org.apache.derby.impl.sql.compile.OptimizerImpl.estimateTotalCost(Unknown Source) at org.apache.derby.impl.sql.compile.OptimizerImpl.costBasedCostOptimizable(Unknown Source) at org.apache.derby.impl.sql.compile.OptimizerImpl.costOptimizable(Unknown Source) at org.apache.derby.impl.sql.compile.FromBaseTable.optimizeIt(Unknown Source) at org.apache.derby.impl.sql.compile.ProjectRestrictNode.optimizeIt(Unknown Source) at org.apache.derby.impl.sql.compile.OptimizerImpl.costPermutation(Unknown Source) at org.apache.derby.impl.sql.compile.SelectNode.optimize(Unknown Source) at org.apache.derby.impl.sql.compile.DMLStatementNode.optimizeStatement(Unknown Source) at org.apache.derby.impl.sql.compile.DMLStatementNode.optimizeStatement(Unknown Source) at org.apache.derby.impl.sql.compile.DMLModStatementNode.optimizeStatement(Unknown Source) at org.apache.derby.impl.sql.compile.DeleteNode.optimizeStatement(Unknown Source) at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
    at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
at org.apache.derby.impl.sql.GenericPreparedStatement.rePrepare(Unknown Source)
    ... 15 more




--
Emnico Services Limited, Dauntsey House, Stonehill Green, Westlea, Swindon SN5 
7HB
Company No. 06390113

This message is confidential and may contain privileged information.  If you 
are not the addressee indicated in this message (or responsible for delivery of 
the message to them), you may not copy or deliver this message to anyone or 
take any action in reliance on it.  If you have received this e-mail in error, 
please delete it and notify the sender as soon as possible.  The Emnico group 
of companies do not accept any liability for any harm that may be caused to the 
recipient's system or data by this message.  Please carry out virus and other 
such checks as you consider appropriate.

Reply via email to