1

我正在使用 Sequel 从 Rack webapp 与 MySQL 数据库通信。有时,应用程序闲置的时间足够长,以至于超过wait_timeout了服务器上的时间(我们已将其保留在默认的 8 小时)。异常表明我们可以启用autoReconnect,但显然不鼓励这样做。无论如何,在这种情况下,我仍然会遇到异常,并且必须重试该操作。

如果autoReconnect是不好的模式,我应该使用什么模式?我想做的是

DB["myDB"].pool.hold do | conn |
  ... do stuff
end

但如果连接过时,当然会抛出。我可以将整个事情包装成一个开始救援,然后再试一次,但如果我有一个大池,我最终可能会重试 10 或 20 次,然后才能找到一个有效的。

4

1 回答 1

4

有三种可能的解决方案:

1)增加wait_timeout。

2) 使用 cron 作业,以便比 wait_timeout 更频繁地使用连接。

3) 使用 connection_validation 扩展,如果检测到断开连接,它将透明地处理重新连接。

于 2012-12-13T16:38:50.870 回答