2017-10-12 4 views
0

J'ai un problème étrange avec mysql et sqlalchemy. Tout fonctionne bien 99% du temps, mais un peu de temps mon code prendre 17 minutes pour exécuter et lancer cette exception:Erreur de validation SQLAlchemy après 17 minutes

Exception déclenchée sur 'commit': (_mysql_exceptions.OperationalError) (2013, « Connexion perdue à MySQL serveur pendant requête ')

Voici le code:

self.engine = create_engine(uri, echo=False, poolclass=NullPool) 
session_maker = orm.sessionmaker(
    bind=self.engine, 
    expire_on_commit=False, 
    autoflush=False, 
    extension=None 
) 
self.session = self.orm.scoping.scoped_session(session_maker) 
self.session.add(entity) # it's a simple object I want to insert 
self.session.commit() 

activer dans mysql:

  • requête lente journal
  • print deadlock InnoDB

Rien dans ces journaux pour mon erreur. La connexion inactive dans mysql est de 30 minutes La connexion inactive dans l'équilibreur de charge avant mysql est de 4 minutes

Donc je n'ai plus d'idée pour mon bogue.

Avez-vous une nouvelle idée?

+0

puisque vous utilisez NullPool, il ne semble pas que la connexion MySQL disparaisse problème. cela vous dérangerait-il de partager la pile d'exceptions avec nous? – herokingsley

Répondre

0

délai d'utilisation avec connect_args

self.engine = create_engine(uri, echo=False, poolclass=NullPool ,connect_args={'connect_timeout': 10}) 

Check here for more info !!!

+0

J'ai vu ce point en effet mais je ne vois pas le lien avec mysql connection perdue. Pouvez-vous m'expliquer s'il vous plait? – Kiva

+0

Je pensais que ce pourrait être le problème du délai d'attente car actuellement aucune autre raison évidente n'est là. Vous pouvez configurer connect_timeout à plus de 20 minutes et le tester –

+0

La valeur par défaut connect_timeout semble être 10 secondes https://github.com/PyMySQL/PyMySQL/blob/dc01c6e7cd06cf523d67140b26afea365c130192/pymysql/connections.py#L584 donc je ne pense pas c'est le bon chemin. – Kiva