One of the features of DBBalancer is that it adapts to the load conditions of the moment in two ways. The first one is increasing/decreasing the number of threads available in the thread pool and second one is increasing/decreasing the number of connections available in the connection pool. These two figures have to be similar, because increasing the number of threads without having enough connections to serve them would be a waste of resources.
The algorithm used to determine if we need to shrink/grow is based in the average size of the thread pool requests queue during the last 4 DBManagementMO thread check runs. With this "memory" procedure we slow the grow/shrink response time, which, while being bad to adapt to sudden load increments, keeps the system from identifying spurious peaks as real, more long term increments in the number of requests.