0

我在 AWS RDS 代理 TargetGroup 设置为使用75%可用连接时看到了这种行为。根据文档,RDS 代理应该只根据需要占用这些连接,而不是尝试全部占用。

我实际上看到的是这样的 -

在此处输入图像描述

当前“借用”连接数与传入客户端连接数相同,但占用的“总”连接数约为最大连接数的 75%。

这可能是什么原因?使用这个数据库的应用程序没有持有任何这些连接,这是我从pg_stats_activity表中检查的。

任何指针都会有所帮助。

更新: 大连接很好,即使它们是idle,只要它们被重新使用代理。在我的情况下,问题似乎源于连接的“固定”,因为SET client_encoding每个连接之前都有一个语句,因此不允许代理重新使用连接。

有一个名为的值EXCLUDE_VARIABLE_SETS应该排除 SET 语句被固定,但它并没有按照它记录的那样做。

我也尝试过将此查询移动到初始化查询,但没有运气。

4

1 回答 1

1

我之前确实读过这个,我从另一篇文章中发现了这个问题:

具有运行时 python 3.7 的 AWS lambda 函数不使用 rds 代理中的连接池,而是在每个请求上创建新连接

他们建议在对数据库进行所有查询之前修改 db 代理目标组以设置 autocommit=0。

AWS 支持帮助解决了这个问题。在初始查询中添加 SET autocommit=0 修复了该问题。您也可以执行以下操作。aws rds modify-db-proxy-target-group --target-group-name --db-proxy-name --connection-pool-config '{"InitQuery": "SET autocommit=0"}'

于 2021-01-19T09:24:08.043 回答