问题描述
我正在阅读DBConnection documentation。我不太明白以下引用:
我们的目标是最多等待 :queue_target 连接。 如果在 :queue_interval 期间检出的所有连接花费的时间超过 :queue_target,然后我们将:queue_target 加倍。如果退房 连接需要比新目标更长的时间,然后我们开始丢弃 消息。
你能举例解释一下吗?
- 在我的应用程序中,我有一个由定期工作人员执行的非常庞大的操作。我想超时 1 分钟,或者根本没有超时。我应该设置哪些
queue_target
和queue_interval
来避免:Elixir.DBConnection.ConnectionError',message => <<"tcp recv: closed (the connection was closed by the pool,possibly due to a timeout or because the pool has been terminated)"
- 在常规情况下,我希望队列超时为 5 秒。我如何使用
queue_target
和queue_interval
实现这一目标?
解决方法
您所指的超时是使用执行函数中的 :timeout
选项设置的(即 execute/4
),:queue_target
和 :queue_interval
仅用于影响池的能够开始新请求(用于从池中检出连接的请求),不是已经检出连接并正在处理的请求。
请记住,所有在 :queue_interval
期间结帐连接的尝试必须花费比 :queue_target
更长的时间才能使这些值影响任何事情。通常,您会测试不同的值并监控数据库的更新能力,以便为您的环境找到最佳值。