does commitChanges lock all other queries?

From: Tore Halset (halse..vv.ntnu.no)
Date: Tue Dec 12 2006 - 06:48:59 EST

  • Next message: Andrus Adamchik: "Re: does commitChanges lock all other queries?"

    Hello.

    One of our applications blocked for some time today. It worked out
    fine after a couple of minutes. It is running cayenne-1.2. We will
    upgrade to 2.0.1 in the start of january. The attached stacktraces
    are extracted using JBoss jmx-console.

    Thread http-0.0.0.0-80-6 are performing a slow
    DataContext.commitChanges. It locks our MS SQL Server for some
    minutes. I guess we will be able to optimize this by deleting some
    old records or creating a index.

    Some other threads are performing simple queries, but are blocked by
    a lock in DataRowStore. Are all (other) queries blocked while doing a
    commitChanges? I have seen some discussion around locks in
    DataRowStore lately, but I do not know if this is related.

      - Tore.

    Thread: http-0.0.0.0-80-3 : priority:5, demon:true, threadId:38,
    threadState:BLOCKED,
    threadLockName:org.objectstyle.cayenne.access.DataRowStor..a2ae9
    org.objectstyle.cayenne.access.DataRowStore.getCachedSnapshot
    (DataRowStore.java:387)
    org.objectstyle.cayenne.access.DataDomainQueryAction.interceptOIDQuery
    (DataDomainQueryAction.java:164)
    org.objectstyle.cayenne.access.DataDomainQueryAction.execute
    (DataDomainQueryAction.java:142)
    org.objectstyle.cayenne.access.DataDomain.onQuery(DataDomain.java:766)
    org.objectstyle.cayenne.util.ObjectContextQueryAction.runQuery
    (ObjectContextQueryAction.java:253)
    org.objectstyle.cayenne.access.DataContextQueryAction.execute
    (DataContextQueryAction.java:90)
    org.objectstyle.cayenne.access.DataContext.onQuery(DataContext.java:
    1422)
    org.objectstyle.cayenne.access.DataContext.performQuery
    (DataContext.java:1411)
    org.objectstyle.cayenne.DataObjectUtils.objectForQuery
    (DataObjectUtils.java:290)
    org.objectstyle.cayenne.DataObjectUtils.objectForPK
    (DataObjectUtils.java:276)
    org.objectstyle.cayenne.DataObjectUtils.objectForPK
    (DataObjectUtils.java:185)

    Thread: http-0.0.0.0-443-2 : priority:5, demon:true, threadId:47,
    threadState:BLOCKED,
    threadLockName:org.objectstyle.cayenne.access.DataRowStor..a2ae9
    org.objectstyle.cayenne.access.ObjectResolver.synchronizedObjectsFromDat
    aRows(ObjectResolver.java:133)
    org.objectstyle.cayenne.access.DataDomainQueryAction.interceptObjectConv
    ersion(DataDomainQueryAction.java:373)
    org.objectstyle.cayenne.access.DataDomainQueryAction.execute
    (DataDomainQueryAction.java:151)
    org.objectstyle.cayenne.access.DataDomain.onQuery(DataDomain.java:766)
    org.objectstyle.cayenne.util.ObjectContextQueryAction.runQuery
    (ObjectContextQueryAction.java:253)
    org.objectstyle.cayenne.access.DataContextQueryAction.execute
    (DataContextQueryAction.java:90)
    org.objectstyle.cayenne.access.DataContext.onQuery(DataContext.java:
    1422)
    org.objectstyle.cayenne.access.DataContext.performQuery
    (DataContext.java:1411)
    org.objectstyle.cayenne.access.ToManyList.resolvedObjectList
    (ToManyList.java:343)
    org.objectstyle.cayenne.access.ToManyList.size(ToManyList.java:296)

    Thread: EventDispatchThread-0 : priority:5, demon:true, threadId:54,
    threadState:WAITING, threadLockName:java.util.Collections
    $SynchronizedLis..2cd2e
    java.lang.Object.wait(Native Method)
    java.lang.Object.wait(Object.java:474)
    org.objectstyle.cayenne.event.EventManager$DispatchThread.run
    (EventManager.java:486)

    Thread: EventDispatchThread-1 : priority:5, demon:true, threadId:55,
    threadState:WAITING, threadLockName:java.util.Collections
    $SynchronizedLis..2cd2e
    java.lang.Object.wait(Native Method)
    java.lang.Object.wait(Object.java:474)
    org.objectstyle.cayenne.event.EventManager$DispatchThread.run
    (EventManager.java:486)

    Thread: EventDispatchThread-2 : priority:5, demon:true, threadId:56,
    threadState:WAITING, threadLockName:java.util.Collections
    $SynchronizedLis..2cd2e
    java.lang.Object.wait(Native Method)
    java.lang.Object.wait(Object.java:474)
    org.objectstyle.cayenne.event.EventManager$DispatchThread.run
    (EventManager.java:486)

    Thread: EventDispatchThread-3 : priority:5, demon:true, threadId:57,
    threadState:WAITING, threadLockName:java.util.Collections
    $SynchronizedLis..2cd2e
    java.lang.Object.wait(Native Method)
    java.lang.Object.wait(Object.java:474)
    org.objectstyle.cayenne.event.EventManager$DispatchThread.run
    (EventManager.java:486)

    Thread: EventDispatchThread-4 : priority:5, demon:true, threadId:58,
    threadState:WAITING, threadLockName:java.util.Collections
    $SynchronizedLis..2cd2e
    java.lang.Object.wait(Native Method)
    java.lang.Object.wait(Object.java:474)
    org.objectstyle.cayenne.event.EventManager$DispatchThread.run
    (EventManager.java:486)

    Thread: EventDispatchThread-0 : priority:5, demon:true, threadId:59,
    threadState:WAITING, threadLockName:java.util.Collections
    $SynchronizedLis..9bfa
    java.lang.Object.wait(Native Method)
    java.lang.Object.wait(Object.java:474)
    org.objectstyle.cayenne.event.EventManager$DispatchThread.run
    (EventManager.java:486)

    Thread: EventDispatchThread-1 : priority:5, demon:true, threadId:60,
    threadState:WAITING, threadLockName:java.util.Collections
    $SynchronizedLis..9bfa
    java.lang.Object.wait(Native Method)
    java.lang.Object.wait(Object.java:474)
    org.objectstyle.cayenne.event.EventManager$DispatchThread.run
    (EventManager.java:486)

    Thread: http-0.0.0.0-443-15 : priority:5, demon:true, threadId:104,
    threadState:BLOCKED,
    threadLockName:org.objectstyle.cayenne.access.ToManyLis..77348f
    org.objectstyle.cayenne.access.ToManyList.resolvedObjectList
    (ToManyList.java:332)
    org.objectstyle.cayenne.access.ToManyList.size(ToManyList.java:296)

    Thread: http-0.0.0.0-80-6 : priority:5, demon:true, threadId:113,
    threadState:RUNNABLE, threadLockName:null
    java.net.SocketInputStream.socketRead0(Native Method)
    java.net.SocketInputStream.read(SocketInputStream.java:129)
    java.io.DataInputStream.readFully(DataInputStream.java:176)
    java.io.DataInputStream.readFully(DataInputStream.java:152)
    net.sourceforge.jtds.jdbc.SharedSocket.readPacket(SharedSocket.java:814)
    net.sourceforge.jtds.jdbc.SharedSocket.getNetPacket(SharedSocket.java:
    695)
    net.sourceforge.jtds.jdbc.ResponseStream.getPacket
    (ResponseStream.java:443)
    net.sourceforge.jtds.jdbc.ResponseStream.read(ResponseStream.java:102)
    net.sourceforge.jtds.jdbc.ResponseStream.peek(ResponseStream.java:87)
    net.sourceforge.jtds.jdbc.TdsCore.wait(TdsCore.java:3772)
    net.sourceforge.jtds.jdbc.TdsCore.executeSQL(TdsCore.java:1031)
    net.sourceforge.jtds.jdbc.JtdsStatement.executeSQL(JtdsStatement.java:
    436)
    net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeUpdate
    (JtdsPreparedStatement.java:402)
    org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeUpdate
    (WrappedPreparedStatement.java:227)
    org.objectstyle.cayenne.access.jdbc.BatchAction.runAsIndividualQueries
    (BatchAction.java:224)
    org.objectstyle.cayenne.access.jdbc.BatchAction.performAction
    (BatchAction.java:117)
    org.objectstyle.cayenne.dba.sqlserver.SQLServerBatchAction.performAction
    (SQLServerBatchAction.java:95)
    org.objectstyle.cayenne.access.DataNodeQueryAction.runQuery
    (DataNodeQueryAction.java:95)
    org.objectstyle.cayenne.access.DataNode.performQueries(DataNode.java:
    309)
    org.objectstyle.cayenne.access.DataDomainFlushAction.runQueries
    (DataDomainFlushAction.java:255)
    org.objectstyle.cayenne.access.DataDomainFlushAction.flush
    (DataDomainFlushAction.java:177)
    org.objectstyle.cayenne.access.DataDomain.onSyncFlush(DataDomain.java:
    830)
    org.objectstyle.cayenne.access.DataDomain$2.transform(DataDomain.java:
    801)
    org.objectstyle.cayenne.access.DataDomain.runInTransaction
    (DataDomain.java:856)
    org.objectstyle.cayenne.access.DataDomain.onSync(DataDomain.java:798)
    org.objectstyle.cayenne.access.DataContext.flushToParent
    (DataContext.java:1261)
    org.objectstyle.cayenne.access.DataContext.commitChanges
    (DataContext.java:1165)

    Thread: http-0.0.0.0-443-18 : priority:5, demon:true, threadId:187,
    threadState:BLOCKED,
    threadLockName:org.objectstyle.cayenne.access.DataRowStor..a2ae9
    org.objectstyle.cayenne.access.ObjectResolver.synchronizedObjectsFromDat
    aRows(ObjectResolver.java:133)
    org.objectstyle.cayenne.access.DataDomainQueryAction.interceptObjectConv
    ersion(DataDomainQueryAction.java:373)
    org.objectstyle.cayenne.access.DataDomainQueryAction.execute
    (DataDomainQueryAction.java:151)
    org.objectstyle.cayenne.access.DataDomain.onQuery(DataDomain.java:766)
    org.objectstyle.cayenne.util.ObjectContextQueryAction.runQuery
    (ObjectContextQueryAction.java:253)
    org.objectstyle.cayenne.access.DataContextQueryAction.execute
    (DataContextQueryAction.java:90)
    org.objectstyle.cayenne.access.DataContext.onQuery(DataContext.java:
    1422)
    org.objectstyle.cayenne.access.DataContext.performQuery
    (DataContext.java:1411)

    Thread: http-0.0.0.0-443-19 : priority:5, demon:true, threadId:188,
    threadState:BLOCKED,
    threadLockName:org.objectstyle.cayenne.access.DataRowStor..a2ae9
    org.objectstyle.cayenne.access.ObjectResolver.synchronizedObjectsFromDat
    aRows(ObjectResolver.java:133)
    org.objectstyle.cayenne.access.DataDomainQueryAction.interceptObjectConv
    ersion(DataDomainQueryAction.java:373)
    org.objectstyle.cayenne.access.DataDomainQueryAction.execute
    (DataDomainQueryAction.java:151)
    org.objectstyle.cayenne.access.DataDomain.onQuery(DataDomain.java:766)
    org.objectstyle.cayenne.util.ObjectContextQueryAction.runQuery
    (ObjectContextQueryAction.java:253)
    org.objectstyle.cayenne.access.DataContextQueryAction.execute
    (DataContextQueryAction.java:90)
    org.objectstyle.cayenne.access.DataContext.onQuery(DataContext.java:
    1422)
    org.objectstyle.cayenne.access.DataContext.performQuery
    (DataContext.java:1411)



    This archive was generated by hypermail 2.0.0 : Tue Dec 12 2006 - 06:49:53 EST