【发布时间】:2021-01-19 07:37:05
【问题描述】:
我看到这种行为是 AWS RDS 代理目标组设置为采用 75% 的可用连接。根据文档,RDS 代理应该只根据需要占用这些连接,而不是尝试全部占用。
我实际看到的是这样的 -
当前“借用”连接数与传入客户端连接数相同,但占用的“总”连接数约为最大连接数的 75%。
这可能是什么原因?使用这个数据库的应用程序没有持有任何这些连接,这是我从pg_stats_activity 表中检查的。
任何指针都会有所帮助。
更新:
大连接很好,即使它们是idle,只要它们被重新使用代理。就我而言,问题似乎源于连接的“固定”,因为在每个连接之前都有SET client_encoding 语句,因此不允许代理重新使用连接。
有一个名为 EXCLUDE_VARIABLE_SETS 的值应该排除 SET 语句被固定,但它并没有按照记录的那样执行。
我也尝试过将此查询移动到初始化查询,但没有成功。
【问题讨论】:
-
您使用的是哪个 RDS 后端?据我了解,Aurora、MySQL、PostreSQL 等实现了不同的功能。
-
@afaulconbridge 我使用的 RDS 后端是 PostgreSQL。我通过从连接初始化期间调用的代码中删除所有可能的“SET”语句并将它们移动到 RDS 代理设置中的
init块来解决了这个问题。这样,即使EXCLUDE_VARIABLE_SETS不起作用,我们也没有大量的SET语句。我很想知道功能集是否因后端类型而异,以及是否记录在某处。 -
这很有趣!我能找到的最好的是docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…——但我确定我在某处读到过,PostgreSQL 后端不支持
initSQL。如果不再是这种情况,那么它会更有用。 -
@afaulconbridge 我所说的
init查询是RDS 代理目标配置中的一个部分,与SQL 中的init查询不同。只是想我会澄清一下。
标签: amazon-web-services amazon-rds amazon-rds-proxy