Tuesday, 18 June 2013

IBM Business Process Manager and the Performance Data Warehouse (PDW)

We're looking at the interaction between BPM and PDW at present, and these two Technotes have been absolutely invaluable: -


Problem(Abstract)

The processing of tracking definitions can cause lock contention due to message-driven bean (MDB) concurrency. The processing of data transfer to the Performance Data Warehouse can also lead to lock contention. The lock occurs because multiple threads are trying to create or alter tables in the Performance Data Warehouse at the same time. This scenario can lead to database lock timeouts or hung threads depending on your lock timeout settings.

Symptom

The following example is one of the lock timeouts that you might see. In this case, there is an Oracle database and the error occurs during the DataDefLoader processing (DataDefLoaderBean.onMessage) of the tracking definitions installation. However, this situation might occur with any database type. If the issue is during the next stage of processing, then you might, instead, see the problem with RepresentationManager processing (RepresentationManagerQueueBean.onMessage).

Note: Lock timeouts are very generic errors. This document is only for the specific case where they occur during the processing of tracking definitions or data transfer.

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [insert into LSW_SNAPSHOT (SNAPSHOT_ID,NAME,DESCRIPTION,SHORT_NAME,ARCHIVED) values (?,?,?,?,?)]; nested exception is java.sql.SQLSyntaxErrorException: ORA-02049: timeout: distributed transaction waiting for lock
at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.translate(SQLExceptionSubclassTranslator.java:78)
at 
...
at com.lombardisoftware.server.tracking.definitionloader.TrackingDefinitionTraverser.traverse(TrackingDefinitionTraverser.java:62)
at com.lombardisoftware.server.tracking.definitionloader.BasicDefinitionLoaderImpl.store(BasicDefinitionLoaderImpl.java:76)
at com.lombardisoftware.server.tracking.loader.LoaderStrategy.resumeLoad(LoaderStrategy.java:109)
at com.lombardisoftware.server.tracking.definitionloader.DefinitionLoaderStrategy.resumeLoad(DefinitionLoaderStrategy.java:60)
at com.lombardisoftware.server.ejb.tracking.DataDefLoaderCore.onMessage(DataDefLoaderCore.java:40)
...
at com.lombardisoftware.server.ejb.tracking.DataDefLoaderBean.onMessage(DataDefLoaderBean.java:38)
at com.ibm.ejs.container.MessageEndpointHandler.invokeMdbMethod(MessageEndpointHandler.java:1092)
...
Caused by: java.sql.SQLSyntaxErrorException: ORA-02049: timeout: distributed transaction waiting for lock
...
at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:213)
at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.pmiExecuteBatch(WSJdbcPreparedStatement.java:1016)

Disabling tracking data generation for a Process Server or Process Center in IBM Business Process Manager (BPM)

Technote (FAQ)

Question

How do I disable tracking data generation for a Process Server or a Process Center?

Answer

There might be reasons why you do not want to use the Performance Data Warehouse in an environment. You might not be interested in collecting tracking data or using the related features that use tracking data. Tracking data is used by the Performance Data Warehouse reports, views and the Optimizer. Although there is not a documented process for disabling the Performance Data Warehouse, it can be done with some manual configuration changes. If Performance Data Warehouse data transfer is not working or stopped in an improper manner then you can have data build up in the LSW_PERF_DATA_TRANSFER table of the Process Server database.

If you do not plan to use tracking data then you should disable performance server communication using the following steps. This approach prevents Process Servers from creating and sending tracking data to the Performance Data Warehouse.

No comments:

Note to self - use kubectl to query images in a pod or deployment

In both cases, we use JSON ... For a deployment, we can do this: - kubectl get deployment foobar --namespace snafu --output jsonpath="{...