【问题标题】:What causes pgbouncer's avg_wait_time to be > 0?是什么导致 pgbouncer 的 avg_wait_time > 0?
【发布时间】:2019-07-08 21:23:51
【问题描述】:

文档将 avg_wait_time 描述为:

客户端等待服务器所花费的时间,以微秒为单位(平均每秒)。

我们看到 avg_wait_time 偶尔出现峰值(通常为 0)。在这些高峰期间,我可以说,有可用/空闲的服务器。在这些情况下,什么可能导致等待时间大于 0?

【问题讨论】:

    标签: pgbouncer


    【解决方案1】:

    hackernoon 读取流会导致您的连接池已用尽,新连接需要等待,直到有空闲点可用于连接到池或进入执行阶段。

    客户端链接到的这些服务器连接是 “pooled” —— 数量有限,可重复使用。正因为如此,它可能 发生在客户端发送一些请求(开始事务或 执行查询)对应的服务器连接池是 耗尽,即 pgbouncer 打开了尽可能多的连接 它和所有这些都被(链接到)其他一些客户占用。 本场景中的 PgBouncer 将客户端放入队列中,并且该客户端的 连接进入 CL_WAITING 状态。这也可能发生,而 客户端仅登录,因此还有 CL_WAITING_LOGIN :

    【讨论】:

    • 不确定这里的情况。在等待时间大于 0 的最近一段时间内,show databases 列出的 pool_size 为 100,当前连接数为 29。如果我理解正确,这是否意味着池没有耗尽?
    • 连接数可能是29,但是如果它们都试图在同一个池中同时执行一个查询,并且执行窗口被占用,它们必须在池中等待。你能看到用户连接到了哪些池吗?
    • 什么是执行窗口?我给出的数字是针对单个池的。我很高兴尝试不同的设置。如果你的理论是正确的,我应该调整什么参数?
    • 好吧,想象一下你在银行。大厅里有10个人,一个收银窗口是开着的,有2个人在排队,柜员正在帮助别人。排队的两个人将不得不等待柜员完成帮助客户请求。
    • 再一次,我可以改变什么设置来测试你的理论?
    猜你喜欢
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 2012-08-13
    • 2010-12-31
    相关资源
    最近更新 更多