如何解决Elixir:DBConnection queue_target 和 queue_interval 解释
我正在阅读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
更长的时间才能使这些值影响任何事情。通常,您会测试不同的值并监控数据库的更新能力,以便为您的环境找到最佳值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。