Article - CS233022

IndexQueue1 and IndexQueue2 deadlock in the database for Windchill

Modified: 05-Jan-2025   


Applies To

  • FlexPLM 10.2 M030 to 12.0
  • Windchill PDMLink 10.2 M030-CPS07 to 12.1

Description

  • IndexQueue1 or IndexQueue2 generates a cluster stack in BackgroundMethodServer log due to SQL exception
  • Queues are blocked/slow due to IndexQueue
  • Queues are blocked in the executing and ready state
  • One IndexQueue will have wt.pds.SQLDatabasePds.handleSQLException:
"IndexQueue2.PollingThread" Id=181 prio=5 RUNNABLE (in native)
      Blocked (cnt): 22653; Waited (cnt): 23359
      CPU nanos: 325531250000; User nanos: 308593750000; Bytes allocated: 129579637296
      Method context: 4eihtrmk;jrf0wyi1;3980;5ydi2x;881070; DB session: 190
      % of 1 CPU used by context: 2.9146476775255348 (46875000/1608256132); Bytes allocated by context: 13757424
  at java.net.SocketInputStream.socketRead0(Native Method)
  at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
  at java.net.SocketInputStream.read(SocketInputStream.java:171)
  at java.net.SocketInputStream.read(SocketInputStream.java:141)
  at wt.util.WrappedSocket$Input.read(WrappedSocket.java:379)
  at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
  at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
    - locked java.io.BufferedInputStream@64780d
  at java.io.DataInputStream.readByte(DataInputStream.java:265)
  at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:222)
  at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:161)
  at com.sun.jmx.remote.internal.PRef.invoke(Unknown Source)
  at javax.management.remote.rmi.RMIConnectionImpl_Stub.invoke(Unknown Source)
  at javax.management.remote.rmi.RMIConnector$RemoteMBeanServerConnection.invoke(RMIConnector.java:1020)
  at javax.management.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:298)
  at com.sun.proxy.$Proxy170.getAttributesFromAllClusterMethodServers(Unknown Source)
  at wt.util.jmx.GetClusterStacks.outputClusterStacks(GetClusterStacks.java:75)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at wt.pds.SQLDatabasePds.handleSQLException(SQLDatabasePds.java:1222)
  at wt.pds.SQLDatabasePds.processSQLException(SQLDatabasePds.java:4132)
  at wt.pds.SQLDatabasePds.insertList(SQLDatabasePds.java:3237)
  at wt.pds.SQLDatabasePds.insert(SQLDatabasePds.java:306)
  at wt.pom.PersistentObjectManager.insert(PersistentObjectManager.java:2404)
  at wt.pom.PersistentObjectManager.insertUpdate(PersistentObjectManager.java:2322)
  at wt.pom.PersistentObjectManager.insert(PersistentObjectManager.java:598)
  at wt.fc.StandardPersistenceManager$1.doMultiOperation(StandardPersistenceManager.java:1673)
  at wt.fc.WTCollectionRetrySingleProcessor.executeWithRetry(WTCollectionRetrySingleProcessor.java:162)
  at wt.fc.WTCollectionRetrySingleProcessor.execute(WTCollectionRetrySingleProcessor.java:87)
  at wt.fc.StandardPersistenceManager.insert(StandardPersistenceManager.java:1694)
  at wt.fc.StandardPersistenceManager.store(StandardPersistenceManager.java:712)
  at wt.fc.StandardPersistenceManager.store(StandardPersistenceManager.java:1091)
  at wt.fc.StandardPersistenceManager.save(StandardPersistenceManager.java:928)
  at sun.reflect.GeneratedMethodAccessor486.invoke(Unknown Source)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at wt.services.ServiceFactory$ServerInvocationHandler.invoke(ServiceFactory.java:399)
  at com.sun.proxy.$Proxy11.save(Unknown Source)
  at wt.index.IndexStatusHelper.updateIndexerSet(IndexStatusHelper.java:217)
  at wt.index.AbstractIndexServiceDelegate.index(AbstractIndexServiceDelegate.java:466)
  at wt.index.IndexingServiceImpl.processIndexRequest(IndexingServiceImpl.java:280)
  at wt.index.StandardIndexPolicyManager.processIndexRequest(StandardIndexPolicyManager.java:387)
 
  • And the other IndexQueue will have wt.index.IndexStatusHelper.updateIndexerSet:
"IndexQueue1.PollingThread" Id=191 prio=5 RUNNABLE (in native)
      Blocked (cnt): 22417; Waited (cnt): 23112
      CPU nanos: 326984375000; User nanos: 311640625000; Bytes allocated: 129347105296
      Method context: 4eihtrmk;jrf0wyi1;3980;5ydi2x;881069; DB session: 177
      % of 1 CPU used by context: 1.9430641127701833 (31250000/1608284554); Bytes allocated by context: 12813432
  at java.net.SocketInputStream.socketRead0(Native Method)
  at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
  at java.net.SocketInputStream.read(SocketInputStream.java:171)
  at java.net.SocketInputStream.read(SocketInputStream.java:141)
  at oracle.net.ns.Packet.receive(Packet.java:311)
  at oracle.net.ns.DataPacket.receive(DataPacket.java:105)
  at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:305)
  at oracle.net.ns.NetInputStream.read(NetInputStream.java:249)
  at oracle.net.ns.NetInputStream.read(NetInputStream.java:171)
  at oracle.net.ns.NetInputStream.read(NetInputStream.java:89)
  at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:123)
  at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:79)
  at oracle.jdbc.driver.T4CMAREngineStream.unmarshalUB1(T4CMAREngineStream.java:426)
  at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:390)
  at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249)
  at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:566)
  at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:215)
  at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:58)
  at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:943)
  at oracle.jdbc.driver.OraclePreparedStatement.executeForRowsWithTimeout(OraclePreparedStatement.java:10932)
  at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:11043)
    - locked oracle.jdbc.driver.T4CConnection@706d819c
  at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:244)
  at wt.pds.SQLDatabasePds.insertList(SQLDatabasePds.java:3201)
  at wt.pds.SQLDatabasePds.insert(SQLDatabasePds.java:306)
  at wt.pom.PersistentObjectManager.insert(PersistentObjectManager.java:2404)
  at wt.pom.PersistentObjectManager.insertUpdate(PersistentObjectManager.java:2322)
  at wt.pom.PersistentObjectManager.insert(PersistentObjectManager.java:598)
  at wt.fc.StandardPersistenceManager$1.doMultiOperation(StandardPersistenceManager.java:1673)
  at wt.fc.WTCollectionRetrySingleProcessor.executeWithRetry(WTCollectionRetrySingleProcessor.java:162)
  at wt.fc.WTCollectionRetrySingleProcessor.execute(WTCollectionRetrySingleProcessor.java:87)
  at wt.fc.StandardPersistenceManager.insert(StandardPersistenceManager.java:1694)
  at wt.fc.StandardPersistenceManager.store(StandardPersistenceManager.java:712)
  at wt.fc.StandardPersistenceManager.store(StandardPersistenceManager.java:1091)
  at wt.fc.StandardPersistenceManager.save(StandardPersistenceManager.java:928)
  at sun.reflect.GeneratedMethodAccessor486.invoke(Unknown Source)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at wt.services.ServiceFactory$ServerInvocationHandler.invoke(ServiceFactory.java:399)
  at com.sun.proxy.$Proxy11.save(Unknown Source)
  at wt.index.IndexStatusHelper.updateIndexerSet(IndexStatusHelper.java:217)
  at wt.index.AbstractIndexServiceDelegate.index(AbstractIndexServiceDelegate.java:466)
  at wt.index.IndexingServiceImpl.processIndexRequest(IndexingServiceImpl.java:280)
  at wt.index.StandardIndexPolicyManager.processIndexRequest(StandardIndexPolicyManager.java:387)
  • Oracle alert log indicates a deadlock occurred:
ORA-00060: Deadlock detected. See Note 60.1 at My Oracle Support for Troubleshooting ORA-60 Errors. More info in file E:\ORACLE\diag\rdbms\wind\wind\trace\wind_ora_864.trc.
  • Session IDs in Oracle trace file match db session in BackgroundMethodServer log
    • wind_ora_864.trc shows session IDs 177 and 190 are deadlocked:
Deadlock graph:
                                          ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name                             process session holds waits  process session holds waits
TX-000E0010-0001DD9C-00000000-00000000        109     190     X             61     177           S
TX-000D0006-0001BC1C-00000000-00000000         61     177     X            109     190           S
 
  • BackgroundMethodServer log shows DB session: 177 for IndexQueue1:
"IndexQueue1.PollingThread" Id=191 prio=5 RUNNABLE (in native)
      Blocked (cnt): 22417; Waited (cnt): 23112
      CPU nanos: 326984375000; User nanos: 311640625000; Bytes allocated: 129347105296
      Method context: 4eihtrmk;jrf0wyi1;3980;5ydi2x;881069; DB session: 177
BackgroundMethodServer log shows DB session: 190 for IndexQueue2:
"IndexQueue2.PollingThread" Id=181 prio=5 RUNNABLE (in native)
      Blocked (cnt): 22653; Waited (cnt): 23359
      CPU nanos: 325531250000; User nanos: 308593750000; Bytes allocated: 129579637296
      Method context: 4eihtrmk;jrf0wyi1;3980;5ydi2x;881070; DB session: 190
 
  • Oracle trace file shows both deadlocked sessions are currently running the same INSERT statement:
INSERT INTO IndexStatus(classnameA2A2,updateCountA2,batchId,coreName,errorDesc,indexRequestId,indexedObject,indexerSet,status,markForDeleteA2,ufid,verified,updateStampA2,createStampA2,modifyStampA2,idA2A2) VALUES ('wt.index.IndexStatus',1,:1 ,:2 ,:3 ,:4 ,:5 ,:6 ,:7 ,:8 ,:9 ,:10 ,:11 ,:12 ,:13 ,:14 )
​​​​​​​
This is a printer-friendly version of Article 233022 and may be out of date. For the latest version click CS233022