Forum OpenACS Q&A: Response to Beginners Question on Processes/ Database Pools / Threads

When I start AOLserver, it starts several processes. Are these the "Threads" I can define in the config file? (maxthreads/minthreads) How can I somehow compute the number of threads I have to define for a given number of concurrent requests?
Are you running Linux? Linux muddies the process/thread distinction; in this case each thread has its own pid (process id), so most tools (ps, for instance) get confused. As for thread computation, I really don't know. Lots of people have posted lots of tuning recommendations, and they're all different. I'll just politically plead ignorance.

What means "connsperthread"? For what use would I have to update this to 1, 2, 3 ...?
I was unaware that was still supported. connsperthread is the number of connections served by a thread before the thread is recycled. IIRC, a setting connsperthread to zero means there is no limit. Hopefully someone can back me up on this point.

Should the number of connections for the Database Pools be the same as the "maxthreads" parameter?
No, it normally should be much lower. All the threads share those pools, you see, and a thread doesn't always need a DB handle. So the db pool connections value should be some fraction of the maxthreads parameter, the exact value of which depends on your ratio of static file to DB-backed file requests.

Does the "keep-alive" thread mean that some threads are waiting for requests from a certain client and do not handle other requests for that time?
I think so. The HTTP/1.1 meaning is clear, but I'm not 100% certain about implementation. It may well be, OTOH, that threads can detach from connections and come back to a keep-alive request when appropriate. markd?
Can I (in an adp file) grab just one handle per pool? Or am I able to take as many handles from a Pool until the maximum defined?
One handle per pool per thread. That will look like a design error at the beginning, then it will look like a win when a thread tries to hog the pools, then later it will look like an error again when your scripts become more complicated and you can't tell where a pool is taken. Eventually you'll give up and start using the OACS4 db_select, db_dml, db_et-cetera functions.
I read the database api source code, but I do not really understand the way transactions are done: The release unused handle statements are _after_ the "abort transaction" statements. I can't explain to me why the database is rolling smth. back when statements are done with different handles from different pools.
Could you rephrase this? I don't understand what the problem is. You send 'abort transaction' to a handle, then release it. Seems proper to me.