The project is actually using mod_wsgi (presumably using MPM) - this seems to explain the rapid increase in the number of connections. It's been suggested that implementing SQLRelay could be a solution. Is this sensible? Are there any (better?) alternatives that I could look at?
Cheers, Chris On Tuesday, 22 December 2015 12:02:40 UTC, Chris Wood wrote: > > > > 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 >> > <mailto:sqlalchemy+unsubscr...@googlegroups.com>. >> > To post to this group, send email to sqlal...@googlegroups.com >> > <mailto:sqlal...@googlegroups.com>. >> > 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.