首页 > 解决方案 > Elixir:解释 DBConnection queue_target 和 queue_interval

问题描述

我正在阅读DBConnection 文档。而且我不太明白以下引用:

我们的目标是最多等待 :queue_target 连接。如果在 :queue_interval 期间检出的所有连接都超过 :queue_target,那么我们将 :queue_target 加倍。如果签出连接的时间比新目标要长,那么我们就开始丢弃消息。

你能用例子解释一下吗?

  1. 在我的应用程序中,我有非常庞大的操作,由周期性工作人员执行。我希望它有 1 分钟的超时时间,或者根本没有超时时间。我应该避免哪一个queue_targetqueue_intervalElixir.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)"
  2. 在正常情况下,我希望队列超时为 5 秒。我怎么能用 and 实现这queue_target一点queue_interval

标签: timeoutelixirdbconnection

解决方案


您所指的超时是使用:timeout执行函数中的选项(即execute/4)设置的,:queue_target并且:queue_interval仅用于影响池开始请求的能力(对于从池中签出连接的请求),而不是已经签出的请求连接并且已经在处理中。

请记住,在 a 期间检查连接的所有尝试都:queue_interval必须花费比:queue_target这些值影响任何东西更长的时间。通常,您会测试不同的值并监控数据库跟上的能力,以便为您的环境找到最佳值。


推荐阅读