Add some updates here. I found every time I got this problem, the affected rows is 18446744073709552000.
On Tue, Jul 19, 2016 at 2:13 AM, Tian JiaLin <himurakenshi...@gmail.com> wrote: > Thanks for the reply, Mike. > > Actually there is no obvious errors, furthermore with a lower percentage > occurrences. That's why I feel this is pretty hard to debug. > > And I did the similar thing like the snippets you provided > to invalidate the broken connections. > > I'm not using any session variables in the code. > > I didn't try the NullPool implementation yet, because I think it should > work like the "No Pool Version", which is working properly on my side. But > I can try, maybe it will bring some clues. > > On Tue, Jul 19, 2016 at 1:47 AM, Mike Bayer <mike...@zzzcomputing.com> > wrote: > >> >> >> On 07/18/2016 12:15 PM, Tian JiaLin wrote: >> >>> Hi Everyone, >>> >>> I have been using MySQL-Python for a long time. Recently I tried to >>> integrated a connection pool which is based on SQLAlchemy, In terms of >>> the legacy code, I'm using the raw_connection from the engine. >>> >>> Here is the sample code of two implementations: >>> >>> >>> *No Pool Version:* >>> >>> * >>> * >>> >>> connection = MySQLdb.connect(...) >>> >>> connection.autocommit(True) >>> try: >>> cursor = db.cursor() >>> if not cursor.execute(sql, values) > 0: >>> return None >>> row = cursor.fetchone() >>> finally: >>> connection.close() >>> return row[0] >>> >>> | >>> | >>> >>> * >>> * >>> >>> *Pool Version:* >>> >>> * >>> * >>> >>> pool = create_engine("mysql+mysqldb://...") >>> connection = pool.raw_connection() >>> >>> connection.autocommit(True) >>> try: >>> cursor = db.cursor() >>> if not cursor.execute(sql, values) > 0: >>> return None >>> row = cursor.fetchone() >>> finally: >>> connection.close() >>> return row[0] >>> >>> | >>> | >>> >>> * >>> *The codes look similar except the way to obtain the connection. After >>> using the pool version, sometimes(not every time, actually in my >>> situation, it occurs with 0.01% of all db queries), the return value >>> of |execute| method is great than 0 and the |fetchone| method will >>> return None. I guess it may related to the connection reuse, but I have >>> no idea of which part is going wrong. This will be happened with any >>> kind of SQL, I don't think it related to any specific one, but I can put >>> some examples here. >>> >> >> I assume by "db.cursor" you meant, "connection.cursor". >> >> Are there any critical exceptions being thrown, like deadlock errors, >> disconnect errors, etc. for which the connection is not being invalidated? >> SQLAlchemy's engine will invalidate the connection and the pool if we >> encounter any of these error codes: >> >> if isinstance(e, (self.dbapi.OperationalError, >> self.dbapi.ProgrammingError)): >> return self._extract_error_code(e) in \ >> (2006, 2013, 2014, 2045, 2055) >> elif isinstance(e, self.dbapi.InterfaceError): >> # if underlying connection is closed, >> # this is the error you get >> return "(0, '')" in str(e) >> >> when you use engine.raw_connection(), none of the above checking occurs. >> If you get any of the above and continue using the connection, it may fail >> to function properly afterwards. You would need to invalidate() that >> connection (you can call this on the wrapper returned by raw_connection). >> >> Is there any use of SESSION level variables ? (e.g. SET SESSION). >> >> Using pool_class=NullPool resolves ? >> >> >> >> >> >> >> >> >> >>> >>> SQL Examples: >>> >>> >>> 1. SELECT uid FROM bookmarks WHERE object_id=?; >>> >>> 2. SELECT last_activity_time FROM categories WHERE uid=? LIMIT 1; >>> >>> >>> Here is my server setups: >>> >>> >>> Apache + mod_wsgi (hybrid multi-process multi-threaded) >>> >>> >>> Pool Settings: >>> >>> >>> pool_size: 3 >>> >>> max_overflow: 20 >>> >>> pool_reset_on_return: none (also tried rollback, but still got the >>> errors) >>> >>> pool_recycle: 3600 >>> >>> >>> MySQL: >>> >>> >>> version 5.7.11 >>> >>> >>> I'm using AWS RDS. Basically I'm using the default parameter groups from >>> the RDS with some small changes like max_connections and sync_binlog. No >>> sure which part is helpful to diagnose the problem. >>> >>> >>> I have been working on this problem for one week without any >>> progress. Does anyone have some ideas what gonna be the potential reason >>> of this problem? >>> >>> >>> Thanks! >>> >>> -- >>> 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 >>> <mailto:sqlalchemy+unsubscr...@googlegroups.com>. >>> To post to this group, send email to sqlalchemy@googlegroups.com >>> <mailto:sqlalchemy@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 a topic in the >> Google Groups "sqlalchemy" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/sqlalchemy/T6EXkR96oU0/unsubscribe. >> To unsubscribe from this group and all its topics, 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. >> > > > > -- > kenshin > > http://kenbeit.com > Just Follow Your Heart > -- kenshin http://kenbeit.com Just Follow Your Heart -- 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.