On Jun 17, 2008, at 12:41 PM, Laurence Rowe wrote:
What connection pooling is used by default? e.g. with create_engine('sqlite:///:memory:')
sqlite is a special case, it uses the SingletonThreadPool. This pool holds onto one connection per thread. This is used in SQLite because of a sometimes-restriction that a sqlite connection can only be used in the same thread in which it was created. The pool in normal use is QueuePool.
I think we are only talking about the difference between using four pools of one connection versus one pool of four connections (assuming the standard four threads in zope). I don't see that making a lot of difference in practice.
in practice, a single pool of four connections means if one of those connections encounters a "connection lost" exception, the exception is raised, and the entire pool is recycled; meaning that only one exception is raised for the whole application during a database restart. It also means that the total connections used by the application for a particular database can be configured/throttled in one place. To me thats a significant difference.