2008-10-12 84 views
2

有时在我们的生产环境发生服务器连接(这是使用MySQLdb的python程序)和mysql服务器连接不畅时,一些软件包丢失,一些黑魔法发生,MySQLdb.execute()对象永远不会结束(或花费大量时间结束)。MySQLdb执行超时

这是非常糟糕的,因为这是浪费服务工作者线程。有时会导致工作人员疲惫不堪,服务停止响应。

所以问题是:有没有办法在给定的时间后中断MySQLdb.Connection.execute操作?

回答

2

如果通信存在这样的问题,可以考虑编写一个'代理',通过脆弱的连接接收你的SQL命令,并将它们转发到MySQL服务器的可靠通道上(可能与MySQL服务器在同一个机器上运行) 。这样您就可以完全控制故障检测和重试。

1

您需要准确分析问题所在。如果服务器不在,MySQL连接最终应该超时; TCP保持活动通常启用。您可能能够调整OS级TCP超时。

如果数据库是“片状”,那么您肯定需要调查如何。数据库似乎不太可能是问题,更可能是两者之间的网络。

如果您正在使用任何类型的(某些)状态防火墙,则可能是因为它们正在丢失某些状态,从而导致长时间连接失败。

您可能需要考虑更改MySQL中的空闲超时参数;否则,长期未使用的连接可能会“过时”,服务器和客户端都认为它仍然存在,但其间的一些有状态网络元素已经“忘记”了TCP连接。尝试使用这种“陈旧”连接的应用程序在收到错误之前会有很长的等待时间(但最终会发生)。