6 Increasing Performance

This document describes how to increase performance for suspending and recycling events in Oracle Communications Billing and Revenue Management (BRM).

Topics in this document:

See also:

Increasing Heap Size to Avoid Performance Problems

If the searches you run in Suspense Management Center return particularly large results, your performance may slow noticeably, or you may get "Out of memory" error messages. The solution is to increase your maximum heap size. The exact amount varies greatly with your needs and system resources. If performance is very bad or you get "Out of memory" messages frequently, start by doubling the maximum heap size to 128 MB. Remember, however, that making the heap size too large will degrade the performance of other processes.

There are two ways to increase the maximum heap size, depending on whether you have standalone or WebStart BRM implementations.

Increasing Heap Size for Standalone Implementations

  1. Edit the BRM_home_dir/lib/runSMC.bat file to increase the heap size (memory allocation pool) to solve "Out of memory" messages.

    By default, Suspense Management Center has a maximum heap size of 64 MB. This variable is controlled by the -Xmx size entry in the Suspense Manager Center startup line in runSMC.bat. No -Xmx size entry is present in the startup line by default. To increase the heap size, add this entry and a number (in megabytes) to the Suspense Management Center startup line.

    This example adds a 128 MB maximum heap size to Suspense Management Center:

    @start C:\PROGRA~1\COMMON~1\PORTAL~1\JRE\bin\javaw.exe -Xmx128m -cp ".;%SMCDIR%;%SMCDIR%\lib;%SMCDIR%\lib\suspensemgtmain.jar;%SMCDIR%\lib\pfc.jar;%SMCDIR%\3plibs\jh.jar;%SMCDIR%\lib\pcmext.jar;%SMCDIR%\lib\pcm.jar;%SMCDIR%\lib\Suspense_Management_Help_en.jar;%SMCDIR%\lib\Application_Center_Help_en.jar;" com.portal.appcenter.AppCenterMain suspensemgtsuite
    

    Note:

    Be sure to precede and follow the -Xmx size entry with a space.

  2. Stop and restart Suspense Management Center to make the change take effect.

Increasing Heap Size for Web Start Implementations

  1. Open your SuspenseManagement_locale.jnlp file.

  2. Change the j2se element to include a max-heap-size attribute.

    The default entry looks like this:

    <j2se version="1.4*"/>
    

    For example, this entry changes the maximum heap size to 128 megabytes:

    <j2se version="1.4*" max-heap-size="128m"/>
    

    Note:

    The max heap size specified in the JNLP file is used for all associated Suspense Management Center clients.

  3. Stop and restart Suspense Management Center to make the change take effect.

Creating Indexes for Search Templates

By default, Suspense Manager does not include any database indexes for searches other than indexes based on POID IDs. You can improve database performance by creating indexes for your most common searches. The example below guides you through the process.

Note:

If there are many indexes on the tables for /suspended_usage objects, you run the risk of degrading SE Loader performance during bulk loading of /suspended_usage objects. Experiment to find the right balance of indexes for your system.

Example search template:

#Suspense Management Template
#Fri Nov 14 09:16:53 PST 2003
PIN_FLD_CALL_DURATION.max=
PIN_FLD_SUSPENSE_REASON.value=<All>
PIN_FLD_CALL_DURATION.selected=false
PIN_FLD_EDITED.value=<All suspended> 
PIN_FLD_TEST_SUSPENSE_SUBREASON.value=<All>
PIN_FLD_RECORD_TYPE.selected=true 
PIN_FLD_FILENAME.selected=true 
PIN_FLD_TEST_ERROR_CODE.min= 
PIN_FLD_STATUS.value=Suspended 
PIN_FLD_RECORD_TYPE.text= 
PIN_FLD_SUSPENSE_SUBREASON.selected=false
PIN_FLD_SERVICE_CODE.text=
PIN_FLD_NUM_RECYCLES.max=0
PIN_FLD_SUSPENSE_REASON.selected=true
PIN_FLD_TEST_SUSPENSE_REASON.value=<All>
PIN_FLD_START_TIME.selected=false
PIN_FLD_CALLING_FROM.text=
PIN_FLD_CALL_DURATION.min=
PIN_FLD_NUM_RECYCLES.selected=true
PIN_FLD_FILENAME.text=
PIN_FLD_EDITED.enabled=true
PIN_FLD_CALLED_TO.selected=true
PIN_FLD_STATUS.selected=false 
PIN_FLD_TEST_SUSPENSE_REASON.selected=false
PIN_FLD_RECYCLE_T.selected=false 
PIN_FLD_TEST_ERROR_CODE.selected=false
PIN_FLD_CALLING_FROM.selected=true
PIN_FLD_CALLED_TO.text=
PIN_FLD_TEST_ERROR_CODE.max=
PIN_FLD_BATCH_ID.selected=false
PIN_FLD_BATCH_ID.text=
PIN_FLD_SERVICE_CODE.selected=false
PIN_FLD_EDITED.selected=false 
PIN_FLD_SUSPENSE_SUBREASON.value=<All>
PIN_FLD_NUM_RECYCLES.min=0 

The example search template translates into this SQL statement:

SQL> select st.called_to, st.calling_from, s.filename, s.error_code, 
SQL> s.suspense_reason, s.num_recycles from suspended_usage_t s, 
SQL> susp_usage_telco_info_t st where s.status = 0 and s.num_recycles 
SQL> >= 0 and s.num_recycles <= 0 and s.poid_id0 = st.obj_id0;

For Oracle databases, use the statements below to determine which indexes would improve performance.

To evaluate this SQL statement, turn on autotrace and run this statement.

This is the output:

SQL> set autotrace on;
SQL> select st.called_to, st.calling_from, s.filename, s.error_code, 
SQL> s.suspense_reason, s.num_recycles from suspended_usage_t s, 
SQL> susp_usage_telco_info_t st where s.status = 0 and s.num_recycles 
SQL> >= 0 and s.num_recycles <= 0 and s.poid_id0 = st.obj_id0;
... 
13 rows selected.

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   NESTED LOOPS
   2    1     TABLE ACCESS (FULL) OF 'SUSP_USAGE_TELCO_INFO_T'
   3    1    TABLE ACCESS (BY INDEX ROWID) OF 'SUSPENDED_USAGE_T'
   4    3    INDEX (UNIQUE SCAN) OF 'I_SUSPENDED_USAGE__ID' (UNIQUE)

Statistics
----------------------------------------------------------
         176  recursive calls
           0  db block gets
          38  consistent gets
           0  physical reads
           0  redo size
        1218  bytes sent via SQL*Net to client
         430  bytes received via SQL*Net from client
           2  SQL*Net roundtrips to/from client
           4  sorts (memory)
           0  sorts (disk)
          13  rows processed

The Execution Plan shows a listing of TABLE ACCESS (FULL), indicating that search performance would be better if you had created the indexes. Based on the select statement, add appropriate indexes. In this example add them to both num_recycles and the status in suspended_usage_t. This sample statement creates those indexes:

SQL> create index i_susp_usage_test on suspended_usage_t (status, 
SQL> num_recycles);

After creating the indexes, rerunning the select statement results in a more efficient Execution Plan:

Execution Plan
----------------------------------------------------------
   0        SELECT STATEMENT Optimizer=CHOOSE
   1    0   NESTED LOOPS
   2    1     TABLE ACCESS (BY INDEX ROWID) OF 'SUSPENDED_USAGE_T'
   3    2       INDEX (RANGE SCAN) OF 'I_SUSP_USAGE_TEST' (NONUNIQUE)
   4    1     TABLE ACCESS (BY INDEX ROWID) OF 'SUSP_USAGE_TELCO_INFO_T'
   5    4       INDEX (UNIQUE SCAN) OF 'I_SUSP_USAGE_TELCO__ID' (UNIQUE)

Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          19  consistent gets
          0  physical reads
          0  redo size
          1218  bytes sent via SQL*Net to client
          430  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          13  rows processed

The table scan does not read FULL this time, and there are no recursive calls and fewer consistent gets. The result is a more efficient call.

Configuring the Number of Suspended Records to Process in a Transaction

To avoid a large database transaction during bulk operations, you can specify the number of records to process in each transaction in a bulk operation:

  1. Edit the pin_suspense_params file in the BRM_home/sys/data/config directory to specify the maximum number of records to process in a transaction. The file includes examples and instructions.

  2. Load the contents of the file into the /config/suspense_params object in the BRM database by using load_pin_suspense_params.

    See "load_pin_suspense_params".

Suspense Management Center and the pin_recycle utility read the /config/suspense_params file to get the number of records to process in each opcode call and determine the number of times to call the opcodes. For more information, see BRM Opcode Guide.