Saturday, September 5, 2015

IBM BPM Application Server Tuning - Cache settings

IBM BPM applications are heavily dependent on Database and caching is the most important thing while it comes to tuning, as good caching values solved lots of performance issues.

Below are few of the cache settings I have tried earlier and they gave really good result. Please note you have to keep changing cache values and try again and again to identify the best values for these cache settings.

Branch Cache
One entry in the branch cache is used for each project-branch combination that is loaded into the memory cache. For example, if a process application depends on two toolkits, three branch cache entries are required: one for the process application and one for each toolkit. Each entry in the branch cache contains a snapshot cache. Therefore, the number of entries in the branch cache is tunable, independently from the snapshot cache.

You can determine approximate value for branch cache by following equation

(# of unique Process Application snapshots + # of unique toolkit snapshots) x size_constant       
Where value can size_constant be taken as 5 (MB) and tuned to get best result.

Configuration
We can add tag 'branch-context-max-cache-size' in 100Custom.xml file to configure Branch Cache.
We can add below tag in 100Custom.xml to configure BranchCache.
<server merge="mergeChildren">
  <repository merge="mergeChildren">
    <branch-context-max-cache-size merge="replace">64</branch-context-max-cache-size>
  </repository>

</server>

Snasphot Cache
the snapshot cache is tuned independently from the branch cache. Each branch cache entry contains a snapshot cache. In a Process Server environment, each deployed snapshot is deployed to a unique branch. Therefore, in Process Server, the snapshot cache (which is part of each branch cache entry) contains only one entry.

Configuration
We can add tag 'snapshot-cache-size-per-branch' in 100Custom.xml file to configure Branch Cache.
We can add below tag in 100Custom.xml to configure BranchCache.
<server merge="mergeChildren">
  <repository merge="mergeChildren">
    <snapshot-cache-size-per-branch merge="replace">64</snapshot-cache-size-per-branch>
  </repository>

</server>

indexes

The versioning system in IBM BPM depends on a correctly tuned database. In addition to properly tuning the branch cache, it is important to optimize the indexes on the LSW_PO_VERSIONS table. The following indexes improve performance on IBM BPM V7.5 and later:

CREATE INDEX IDXA_PO_VERSIONS ON lsw_po_versions (PO_TYPE,BRANCH_ID,START_SEQ_NUM,END_SEQ_NUM,PO_VERSION_ID) COMPUTE STATISTICS;
CREATE INDEX IDXB_PO_VERSIONS ON lsw_po_versions (BRANCH_ID,END_SEQ_NUM) COMPUTE STATISTICS;
CREATE INDEX IDXC_PO_VERSIONS ON lsw_po_versions (BRANCH_ID,START_SEQ_NUM,END_SEQ_NUM) COMPUTE STATISTICS;
CREATE INDEX IDXD_PO_VERSIONS ON lsw_po_versions (PO_VERSION_ID,PO_TYPE,BRANCH_ID,START_SEQ_NUM,END_SEQ_NUM)

Source - http://www.ibm.com/developerworks/bpm/library/techarticles/1404_booz/1404_booz.html