it's likely that a database connection is being returned to the pool
in an invalid state.

Switching to NullPool temporarily might reveal that this solves all
the issues ; at the very least, I would try setting pool_recycle to a
low number, like 5 minutes, however this won't prevent the problem,
just make it less likely.   What you do need to find are stack traces
that precede the error, to give a clue why a connection would be
placed in the pool in a bad state.

The other possibility is that your application is actually sharing a
single connection across threads in some way which would be a
different problem though with a lot of similar behaviors.   Are there
any global in-memory caches being used of objects where an ORM object
might be shared out among threads, or a background worker thread of
some kind, anything like that ?    Does the application use a
"scoped_session" pattern and maybe the session being passed around in
some cases isn't actually scoped?


On Fri, Apr 12, 2019 at 4:03 AM tonthon <tontho...@gmail.com> wrote:
>
>
> Le 10/04/2019 à 17:12, Mike Bayer a écrit :
>
> On Wed, Apr 10, 2019 at 9:23 AM tonthon <tontho...@gmail.com> wrote:
>
> Hi,
>
> We're using sqlalchemy in a Pyramid Web Application.
>
> We use the ZopeTransactionExtension and our session factory is initialized 
> this way :
>
> DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
>
> We use the pyramid_tm that wraps each web requests in a transaction.
>
> Our services are served through apache and mod_wsgi (1 process, 10 threads).
>
>
> We recently faced the following error :
>
> 193.253.40.35 - 2019-04-08 09:29:23,054 ERROR Exception during reset or 
> similar ([sqlalchemy.pool.QueuePool._finalize_fairy:721])
> Traceback (most recent call last):
>   File 
> "/var/www/autonomie/local/lib/python2.7/site-packages/sqlalchemy/pool.py", 
> line 712, in _finalize_fairy
>     fairy._reset(pool)
>   File 
> "/var/www/autonomie/local/lib/python2.7/site-packages/sqlalchemy/pool.py", 
> line 881, in _reset
>     self._reset_agent.rollback()
>   File 
> "/var/www/autonomie/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
>  line 1632, in rollback
>     self._do_rollback()
>   File 
> "/var/www/autonomie/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
>  line 1670, in _do_rollback
>     self.connection._rollback_impl()
>   File 
> "/var/www/autonomie/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
>  line 706, in _rollback_impl
>     self._handle_dbapi_exception(e, None, None, None, None)
>   File 
> "/var/www/autonomie/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
>  line 1413, in _handle_dbapi_exception
>     exc_info
>   File 
> "/var/www/autonomie/local/lib/python2.7/site-packages/sqlalchemy/util/compat.py",
>  line 265, in raise_from_cause
>     reraise(type(exception), exception, tb=exc_tb, cause=cause)
>   File 
> "/var/www/autonomie/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
>  line 704, in _rollback_impl
>     self.engine.dialect.do_rollback(self.connection)
>   File 
> "/var/www/autonomie/local/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/base.py",
>  line 1804, in do_rollback
>     dbapi_connection.rollback()
> ProgrammingError: (_mysql_exceptions.ProgrammingError) (2014, "Commands out 
> of sync; you can't run this command now") (Background on this error at: 
> http://sqlalche.me/e/f405)
>
>
> I can't reproduce this problem that seems to happen randomly.
>
> Could anyone help me giving some points to investigate ?
>
> Is there some tuning to do (I already set the pool_recycle var) ?
>
> the most important thing is what driver are you using and what version?
>
> are you doing anything with SAVEPOINTs or greenlets / eventlet ?
>
> is the web application experiencing timeouts of some kind, such that
> transactions are being dropped ?
>
> is the above error only showing up in logs or is it occurring
> synchronously with a web request and causing the request to fail ?
>
>
> We use mysqlclient 1.4.1.
>
> We don't use any greenlet or eventlet nor savepoints.
>
> I havn't seen any timeout happening so far.
>
> The given error is happening during the request's lifecycle resulting in a 
> HTTP 500 error code
>
> After the error, the user refreshes and it works.
>
> I don't know if it could be related, but we also see things like 
> "NoSuchColumnError: "Could not locate column in row for column 'count(*)'".
>
>
>
> Thanks in advance
>
> Best regards
>
> Gaston
>
> --
> SQLAlchemy -
> The Python SQL Toolkit and Object Relational Mapper
>
> http://www.sqlalchemy.org/
>
> To post example code, please provide an MCVE: Minimal, Complete, and 
> Verifiable Example. See http://stackoverflow.com/help/mcve for a full 
> description.
> ---
> 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.
>
>
> --
> SQLAlchemy -
> The Python SQL Toolkit and Object Relational Mapper
>
> http://www.sqlalchemy.org/
>
> To post example code, please provide an MCVE: Minimal, Complete, and 
> Verifiable Example. See http://stackoverflow.com/help/mcve for a full 
> description.
> ---
> 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.

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
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