Most of the ECM applications, these days need to provide the search functionality. Many of these applications need to provide with both the basic search and as well the advanced search. Both of these searches can be implemented just as a metadata search or as a full-text search.
Let us look into the scenario wherein the application is implemented with basic and advanced search and both are just metadata search functionalities. For tuning any functionality, it is advisable to performance test the identified functionality and then depending on the performance, performance tuning can be done accordingly.
Pre-requisites for Performance Testing
• Volume of Data
The search would slow down as more and more data gets loaded into the application. The ideal way to performance test this is to load the application with a forecasted 1 year’s volume of data. This would be ideal to gauge the performance of the application. Loading the data can be done via some custom scripts or jobs.
• Number of concurrent users
The number of concurrent users is another key factor to arrive at the performance of the application. Performance test the application with the expected number of concurrent users forecasted to be reached in 1 year. Once these pre-requisites are met, the identified search scenarios can be performance tested
using any of the load testing tools available (eg. LoadRunner).
Performance Tuning Tips
If there occurs to be any performance issue with the search, please check on the following:
If the search is implemented to search on custom object types, please check on the following:
(a) Multi-valued Attributes – The searchable custom attribute can be a multi-valued attribute and this can bring down the performance of the search drastically. If this can be avoided, that would be the best way to do it
(b) Column Indexes – As you would be aware, the custom attributes defined would be in turn columns of custom tables in the underlying database. By default, indexes are created in the table only for the basic object types available in Documentum. So, in the case of searchable custom attributes, ensure that the columns are indexed in the database as this would boost the query performance by avoiding full table scans and would drastically improve the performance of the search.
(c) Functional Indexes – There would be certain scenarios wherein functions would be used as a part of the customized query like UPPER etc., In such scenarios, the normal column indexes in the database would not be used by the underlying database query optimizer and would result in full table scans which is very costly.
In such a scenario, functional indexes can be created on those columns to enhance performance by avoiding full table scans
(d) Avoid using LIKE operator – The LIKE operator in queries are killers as it does not operate on the indexes except for the form LIKE ‘search-value%’. So, if there is a need to use LIKE based search, go in for STARTS WITH search alone to avoid any performance issues.