Thursday, July 03, 2014

Oracle SOA Suite 12c tips - Tuning the SOA infrastructure thread pool

One of the new capabilities of Oracle SOA Suite 12c is the ability to control the SOA infrastructure thread pools, except the resource pools for EDN and the adapters, with Oracle WebLogic Server work managers. Each partition will has its own work managers defined. This allows you to separate services in partitions and, to some extent, tune them separately based on for example specific SLA requirements.

Well, this blog posting is not about explaining the SOA 12c thread pool concepts and all the knobs that you can use to tune the thread pools in SOA. That is extensively explained in the Oracle Documentation, so I am not going to repeat that here. What I want to highlight in this blog posting though, is how the SOADataSource impacts the SOA thread pool settings.

In SOA 12c the size of the SOA thread pools is directly controlled by the Maximum Capacity setting of the SOADatasource. If you change the default value of 50 to, lets say, 250, that will also change the Maximum Threads Constraint settings that should be bound by the number of SOA database connections. For example, if the SOADataSource is configured with a maximum of 250 connections this means that the SOAInternalProcessing_maxThreads constraint will be bound to 125. This corresponds to the the SOAMaxThreadConfig internalProcessingPercentage setting that is set to 50% by default.


SOAInternalProcessing_maxThreads Threads Constraint
SOAMaxThreadsConfig attribute

Having a direct dependency between the SOADataSource connection pool size and the SOA thread pools depending on availability of database connections to the SOA dehydration store, mitigates the risk that SOA runs out of db connections. It is therefore recommended, in most customer scenarios, to only tune the percentages in the SOAMaxThreadConfig configuration attribute or increasing the SOADataSource connection pool. Only dive into the workmanager configurations, such as the Fair Share classes and the thread constraints, if it is really needed.