Article
Tete Zhang · Oct 13, 2016 2m read

Ensemble: Introduction to Pool Size for Business Processes

Each business component in Ensemble picks up its allocated jobs from a pool, and the Pool Size setting for each component determines how many jobs each component can work on each time. In this article we will be specifically discussing different Pool Size settings for Business Processes.

                Pool Size = 1

If a Business Process has its Pool Size set to 1, the messages are processed by the Business Process First-In First-Out (FIFO). This setting gives one job to the Business Process at a time. In a live production where there are massive amount of messages waiting to be processed, each message is guaranteed to be processed in the same order in which it was sent. 

FIFO is essential in Healthcare fields since messages are required to be processed at the exact timely sequence that they are sent. For instance, a patient’s admission information has to be in the system first before their prescriptions are added.

                Pool Size > 1

If FIFO is not required in the design of the Ensemble production and the messages are in the need of being processed as fast as they can be, the Pool Size can be set to a number larger than 1. The largest pool size is recommended to be the same as the number of CPUs in the Ensemble server, since there are only going to be as many jobs available as the number of CPUs.

                Pool Size = 0

When the Pool Size for a Business Process is set to 0, this Business Process will be sharing jobs from a public pool called the Actor Pool or Ens.Actor. Multiple Business Processes with their Pool Size set to 0 will all pick up jobs from the Actor Pool as fast as they can. Business Processes with Pool Size equal to or greater than 1 will not pick up jobs from the Actor Pool. In other words, in order for a Business Process to pick up jobs from the Actor Pool, its private Pool Size has to be set to 0.

The Actor Pool Size can be configured in the configuration page for the entire production. Similarly, the maximum Actor Pool Size recommended is the same as the number of CPUs on the Ensemble server.

When a Business Process is sharing the public actor pool job queue (Ens.Actor queue) with other Business Processes with Pool Size 0, disabling one Business Process will disable the entire queue, and will further effectively disable all Business Processes that use the actor pool. Before disabling such Business Processes, make sure to change its private Pool Size to a number greater than 0.

Here is more information provided by our Documentation if you would like to read more on Pool Size settings: http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=ECONFIG_PoolSize

 

30
2 0 2 603

Replies

The largest pool size is recommended to be the same as the number of CPUs in the Ensemble server, since there are only going to be as many jobs available as the number of CPUs.

Why should number of jobs be less or equal to the number of cores? I tested (admittedly only one) BP for processing some objects and results (messages processed per second) were better with PoolSize=100, than with PoolSize=50 on a system with 1CPU/8cores.

Any given core can only run one process at a time, so it is surprising that you saw faster performance with a pool size of 100 than a pool size of 50.  If anything, that should result in more context switching resulting in a reduction in performance.