2017-10-12 36 views
0

我對mysql和sqlalchemy有一個奇怪的問題。 一切工作的時間細99%,但過一段時間我的代碼需要17分鐘來執行,並拋出這個異常:17分鐘後出現SQLAlchemy提交錯誤

異常的「承諾」提出:(_mysql_exceptions.OperationalError)(2013年,「迷失連接到MySQL查詢「)

這裏時 服務器代碼:

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() 

我啓動mysql中:

  • 慢查詢日誌中的InnoDB

這些日誌我的錯誤沒有

  • 打印僵局。 mysql中的空閒連接是30分鐘 mysql前端負載均衡器中的空閒連接是4分鐘

    所以我沒有更多的想法,我的錯誤。

    你有什麼新想法嗎?與connect_args

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

    Check here for more info

  • +0

    由於您使用的是NullPool,它似乎不像MySQL連接消失的問題。你介意與我們分享異常堆棧嗎? – herokingsley

    回答

    0

    使用超時!

    +0

    我確實看到了這一點,但我沒有看到與mysql丟失連接的鏈接。你能解釋我嗎? – Kiva

    +0

    我認爲這可能是超時問題,因爲目前沒有其他明顯的原因。你可以配置connect_timeout超過20分鐘,並測試它 –

    +0

    默認connect_timeout似乎是10秒https://github.com/PyMySQL/PyMySQL/blob/dc01c6e7cd06cf523d67140b26afea365c130192/pymysql/connections.py#L584所以我不認爲這是一條好路徑。 – Kiva