Performance checklist
Use the IBM® Product Master performance checklist to resolve common performance issues with the product.
Important: Correct installation and administration of the database is critical
to ensure performance. For more information, see Administering database.
While it is known that large amounts of objects can lead to
performance issues, they are often times not avoidable. A custom implementation can require a large
amount of data, with complex entity attributes, and many specs, together with sophisticated business
logic. A smart design or arrangement can affect the performance to some extent, and for the
remaining, you must deal with them case by case.Typical questions include, how large is
large?
and what is the optimal number for different objects?
There is no absolute number
or standard answer, as the different components need to work together and display unique
characteristics for specific user scenarios of specific customer implementation. There is some
benchmark data on the volume testing, which can be considered as a general reference.
The following list identifies possible resolutions that can help you to identify the source
of your product performance issues:
- User interface response time due to large number of concurrent users. When there are large
numbers of users (100+), the
appsvr
process can be stressed due to:- More processing
- More memory consumption (for all the user sessions)
- Potentially thread issue
- Import jobs for initial load. Following are the characteristics of initial data load,
- Large volume of data
- Business validation logic may/may not be turned off
- Mostly database writes (much less reads)
- Parallel jobs
- Check data record dependency
- Keep validation logic to minimal
- Cache candidate for things to be accessed for most of the items (such as category cache, if the item needs to be mapped under the categories)
- Check that the performance bottleneck is in scheduler or at database side
- Import jobs for incremental load. Following are the characteristics of incremental load:
- Data volume is less than the initial load
- May require more business validation logic
- May need more check on existing item/category data
- Combination of database reads/searches/writes
- Parallel jobs
- Optimization of script, potential object/data cache
- System resource sharing between various services. The various services of Product Master on the same box can compete for the limited system resources. For example, while you run jobs, the user interface response time can become slower, due to the processor cycle on the appserver machine, and potentially more loads on the database machine. So if possible, the jobs should be scheduled to run during off-hour when users are not in the system.
- Solution scripts. Many of business logic exists as either script or custom Java™ code (using Product Master
Java API) in Product Master. Code optimization is important to improve the
user interface or job performance.
- Compiled mode,
- Get read-only version of objects if script operation supports that option,
- Be careful of the interaction/validation with external system,
- Potentially cache mechanism to reuse object if frequently accessed,
- Profiling the scenario for deep analysis. Sort the methods by where the most time is spent and
look for the following:
- How much time is being spent (focus on the largest number first),
- The number of executions of the method where a large amount of time is spent.
- Apply solution-specific knowledge to the numbers.
- For example, if you know that your import is loading 100 items, which map to only three possible
categories, but you are calling
getCategoryByPath()
100 times you are wasting processing - if you cached the category you would call this at most three times, despite processing 100 (or even 10 million) items - For example, if you see that a particular database query is taking 10 seconds, can you optimize the query (retrieve less data, simplify what it is searching for, use indexed attributes)
- For example, if you know that your import is loading 100 items, which map to only three possible
categories, but you are calling