Performance Tuning Guide > Tuning the Siebel Application Object Manager for Performance >

Using Thread Pooling for AOM

Optionally, you can configure your AOM components to use thread pooling. Enabling AOM thread pooling as described in this section both pools and multiplexes (shares) multiple tasks across threads.

Using AOM thread pooling can improve performance and scalability on multiple-CPU machines that are under heavy load—for example, machines using eight or more CPUs that are running at more than 75% CPU capacity.

NOTE:  AOM thread pooling is not recommended for smaller server machines or for machines that run under a relatively lower capacity.

About Thread Pooling for AOM

The pool size per multithreaded process for an AOM is determined by the combined settings of the parameters UseThreadPool, ThreadAffinity, MinPoolThreads, and MaxPoolThreads.

AOM thread pooling reduces some of system resource usage devoted to creating and closing session threads, as users log in and log out or are timed out. As when you are not using thread pooling, session threads are created as needed as session requests demand. However, instead of being closed when a session terminates, they are released to a pool, where they become available for use by a subsequent session.

NOTE:  Using thread pooling introduces its own overhead, however, such as in task context-switching. For this reason, it is strongly recommended not to try to pool threads without also multiplexing them (that is, do not set UseThreadPool = TRUE, but ThreadAffinity = TRUE).

Because ThreadAffinity = FALSE, threads are multiplexed, as can be done with certain types of database connections or SISNAPI connections. At any given time, each thread may be dedicated to one or more user session (task).

Configuring AOM Thread Pooling

To use thread pooling, you set the following parameters on the AOM:

  • UseThreadPool = TRUE (default is FALSE)
  • ThreadAffinity = FALSE (default is FALSE)
  • MinPoolThreads = min_number_threads_in_pool (default is 0)

    where min_number_threads_in_pool represents the minimum number of threads in the AOM thread pool.

  • MaxPoolThreads = MinPoolThreads (default is 0)

NOTE:  You must specify a value for MaxPoolThreads that is equal to or greater than the value of MinPoolThreads. Other than this requirement, the specific value you provide does not matter.

To determine an appropriate value for MinPoolThreads and MaxPoolThreads, start slowly, monitor system performance, then introduce more multiplexing, as may be appropriate for your deployment. For example, start with a formula like this (based on two tasks per thread):

MinPoolThreads = MaxPoolThreads = (MaxTasks/MaxMTServers)/2

Subsequently, you may increase this to five tasks per thread, using this formula:

MinPoolThreads = MaxPoolThreads = (MaxTasks/MaxMTServers)/5

For example, if MaxTasks = 525, and MaxMTServers = 5, this would be:

MinPoolThreads = MaxPoolThreads = (525/5)/ 5 = 105/5 = 21

Or, if MaxTasks = 725, and MaxMTServers = 5, this would be:

MinPoolThreads = MaxPoolThreads = (725/5)/ 5 = 145/5 = 29

NOTE:  Adjust values for think time, as necessary. If you cut your think time value in half, then double the number of threads in the pool.

Performance Tuning Guide