Cache property files

The cache property files contain the cache memory parameters of InfoSphere® MDM Collaboration Server

When modifying the settings of object cache, it is important that administrators thoroughly examine the JVM memory settings of potentially affected services to ensure that they are adequately set. The relevance of examining the JVM memory is important, because the size of the object cache is generally proportional to the required amount of memory. If you exceed the available memory with excessively large cache, performance will severely degrade. However, an inadequately sized cache will result in similarly poor performance from excessive CPU and disk utilization.

You can determine the size of the object cache you require by checking the cache hit percentage in the user interface, located on the panel underSystem Administrator > Performance Info > Caches. Select the appropriate object in the drop-down menu to view its cache information. The percentages displayed are calculated based on usage. You must provide the system reasonable time before referencing the cache hit percentage. The calculated percentages will resemble real results only after your system has been running under a normal production load for an extended duration.

Note: When resetting the cache size, you must restart the server for the changes to take effect.

InfoSphere MDM Collaboration Server built-in cache

InfoSphere MDM Collaboration Server provides built-in cache for a list of object types. It is important to understand the scope of the cache, which has implications on the life span and memory consumption on the server. If a cache is maintained in Application Context, it is global to the server instance (each InfoSphere MDM Collaboration Server service); if a cache is contained within User Session, it is specific to one user in one session, and has different copies of cache objects for different user sessions.

The global cache in Application Context keeps one copy, therefore, uses less memory, but has a life span of the entire service process until the service is shut down. On the other hand, the cache in User Session keeps one copy for each user session, therefore can use more memory for many user sessions. The life span of the cache in a user session has the life span of the session, for example, when a user logs out, the session is terminated and the user session caches are released.

The specific cache objects in either global cache or user session cache still observes the rules of object count limit and time-out limit, when either limit is triggered, some cached objects are being removed from cache container, and corresponding memory is reclaimed.

In InfoSphere MDM Collaboration Server version 6.0.0 and earlier, the object count limit and time-out parameters are configured in $TOP/etc/default/common.properties file.
Table 1. InfoSphere MDM Collaboration Server built-in cache within version 6.0.0 and earlier:
Object type Scope Configuration parameters
Access User Session max_accesses_in_cache
Attribute Collection App Context, but per container
max_attrgroups_in_cache
max_attrgroup_timeout
Catalog View User Session max_ctgviews_in_cache
Lookup Table App Context, also session max_lookups_in_cache
Role User Session max_roles_in_cache
Script App Context
max_scripts_in_cache
max_script_cache_timeout_in_seconds
Spec App Context
max_specs_in_cache
max_spec_timeout
Web Service App Context max_wsdls_in_cache
Workflow App Context (query cached)
max_workflow_in_cache
max_workflow_cache_timeout_in_seconds
Since InfoSphere MDM Collaboration Server version 9.0.0 and later, the parameters are configured in $TOP/etc/default/mdm-ehcache-config.xml and $TOP/etc/default/mdm-cache-config.properties (which is an easier way to configure and the values overwrites the parameters defined in mdm-ehcache-config.xml). There are several key parameters for each [cacheName]:
maxElementsInCache
The object count limit.
eternal
If true, elements never expire.
overflowToDisk
False because InfoSphere MDM Collaboration Server objects are not serializable
timeToIdleSeconds
An amount of time an object can be idle before expiration.
timeToLiveSeconds
An amount of time from creation to expiration time.
memoryStoreEvictionPolicy
LRU, FIFO, LFU
Table 2. InfoSphere MDM Collaboration Server built-in cache within version 9.0.0 and later:
Object type Scope cacheName
Access App Context accessCache
Attribute Collection App Context, but per container attrGroupCache
Catalog App Context catalogCache
Catalog View App Context ctgViewCache
Lookup Table App Context lookupCache
Role App Context roleCache
Script App Context scriptCache
Spec App Context
specCache__KEY_START_VERSION_TO_VALUE
specCache__KEY_TO_CURRENT_START_VERSION
specCache__KEY_VERSION_TO_START_VERSION
Web Service App Context wsdlCache
Workflow App Context (query cached) workflowCache
With the introduction of distributed cache (ehcache), most of the objects are cached globally. Multiple service processes can access the same copy of cached objects, which resolves the potential issue of stalled cache. This enhancement leads to better use of memory by removing User Session based cache; also the cached objects can survive even if one service process is shut down.

For determining the effectiveness of each cached object type, InfoSphere MDM Collaboration Server user interface displays the number of cached objects and the count cache hits and cache misses. The information can be analyzed to determine if cache settings is properly done for the implementation and user scenarios.

Solution level cache

InfoSphere MDM Collaboration Server built-in cache usually are definition types of objects. If some objects are frequently accessed in a specific scenario, but that object type does not have built-in cache capability, a solution level cache may help. A typical example is a category or hierarchy cache.

function getCategoryFromCache(hmCategoryCache, hierarchy, sCategoryPK) {
if (!hmCategoryCache.containsKey(sCategoryPK)) {
hmCategoryCache[sCategoryPK] = hierarchy.getEntryByPrimaryKey(sCategoryPK);
}
return hmCategoryCache[sCategoryPK];
}

var hmCategoryCache = [];
var hierarchy = getCategoryTreeByName(“My Hierarchy Name”);

// ...

// Any time you want to retrieve a category (i.e. within a loop where you are
// processing an item import), use this instead...
var category = getCategoryFromCache(hmCategoryCache, hierarchy, sCategoryPK);
item.mapCtgItemToCategory(category); // (for example)