On Tuesday, 22 December 2015 01:53:59 UTC, Michael Bayer wrote:
>
>
>
> On 12/21/2015 07:44 PM, Chris Wood wrote: 
> > Ah, ok - thanks for the explanation - this is different to how I'd been 
> > led to believe it worked! However, I know that even when I'm the only 
> > person testing the application, I'm still getting a large number of 
> > connections. Is there a likely explanation why? 
>
>
> there are three categories of why an application would have lots more 
> connections than what one has set for a given Engine. 
>
> The most common is that the application is making use of child 
> processes, meaning it uses either Python multiprocessing, os.fork(), or 
> is running in a multi-process container such as mod_wsgi under Apache 
> using the prefork MPM.   When Python forks a child process, an existing 
> Engine in the parent process is essentially copied to a new one in the 
> child that now refers to an independent pool of connections. 
>
> The second, also pretty common reason is that it is a common beginner 
> mistake to confuse the create_engine() call for one that is used to 
> procure a database connection.  In this situation, the code will have 
> routines that clearly wish to connect to the database once, then leave, 
> but you'll see the create_engine() call being used each time a new 
> connection is desired, and often you'll see the block ending with an 
> engine.dispose() call (but not always).  As the Engine object is the 
> home for a connection pool, you are essentially creating a whole new 
> connection pool for each actual database request. 
>
> The third, and far less likely scenario, is that there's only one Engine 
> in play, but either the connection.detach() or the engine.dispose() API 
> is being abused, such that connections are de-associated with the Engine 
> but are not being closed.   This is unlikely because those detached 
> connections are implicitly closed one they are garbage collected, though 
> in the case of cx_Oracle this might not work very quickly or reliably. 
>
> For the first two scenarios, pool logging won't indicate much of 
> anything; inspection and understanding of the code and its process model 
> would be needed. For the third, again code inspection looking for any 
> unusual patterns in use with engines or connections, especially calls to 
> engine.dispose() which should never be used in an ordinary application 
> as well as calls to connection.detach(). 
>
>
This information is really helpful, thanks. At the moment, I think that the 
second explanation is probably most likely, but I'll go and see if I can 
work out what's going on properly, and if the code is using that technique 
then it gives me somewhere to start debugging... 
 

>
>
> > 
> > On Monday, 21 December 2015 18:51:25 UTC, Jonathan Vanasco wrote: 
> > 
> >     The sizes for the connection pool are for each instance of your 
> >     application.  If you have a 10connection pool and you are running 10 
> >     instances of your application on the server, you'll easily have 100 
> >     connections.  If you're running 1 instance that forks, each fork 
> >     will have it's own pool (if correctly set up).  Search the docs and 
> >     FAQ for "fork" for more info. 
> > 
> >     I don't have time to respond to the logging stuff now. Hopefully 
> >     someone else will. 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> > Groups "sqlalchemy" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> > an email to sqlalchemy+...@googlegroups.com <javascript:> 
> > <mailto:sqlalchemy+unsubscr...@googlegroups.com <javascript:>>. 
> > To post to this group, send email to sqlal...@googlegroups.com 
> <javascript:> 
> > <mailto:sqlal...@googlegroups.com <javascript:>>. 
> > Visit this group at https://groups.google.com/group/sqlalchemy. 
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to