【发布时间】:2018-10-01 06:21:34
【问题描述】:
我有两层 pgbouncers (v 1.8 uptil PR 147) 连接到 postgresql 数据库。 pgbouncer 的第一层接收来自多个服务的请求,试图连接到多个数据库。这些请求由第一层汇集,并作为新请求转发到数据库,第二层 pgbouncer 运行在 postgresql 数据库之上(在同一主机上)。这些请求被第二层 pgbouncer 池化,然后最终发送到数据库执行。 TLS 模式 在两个 pgbouncer 中都设置为 'require',因为它们位于不同的主机中。 PGB第一层的default_pool_size为40,第二层为400。 数据库一次最多可以处理 500 个连接。 pool mode 都设置为 'transaction'。第一个 pgbouncer 主机内有一个内置脚本,可以将流量直接切换到 postgresql 服务器(如果需要)。
| Services | -----> | Pgbouncer | --------> | Pgbouncer ----> DB |
我注意到在 postgresql 服务器上引入新的数据库层后,由于 pgbouncer 第一层上的客户端等待开始,高峰时段的平均查询持续时间非常长向上。如果我打开这台主机上的开关以将流量直接发送到 postgresql 服务器,平均查询持续时间会立即下降,一切都开始恢复正常。我可以理解,引入一个新的 pgbouncer 层会增加一个额外的跳跃,但它不应该对指标产生如此大的影响。 avg_query_duration 在第一个 PGB 上变高的可能原因是什么?如何缓解?
【问题讨论】: