【问题标题】:AWS RDS proxy target group - Session Pinning Filter not workingAWS RDS 代理目标组 - 会话固定过滤器不起作用
【发布时间】: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 后端不支持init SQL。如果不再是这种情况,那么它会更有用。
  • @afaulconbridge 我所说的init 查询是RDS 代理目标配置中的一个部分,与SQL 中的init 查询不同。只是想我会澄清一下。

标签: amazon-web-services amazon-rds amazon-rds-proxy


【解决方案1】:

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

AWS lambda function with runtime python 3.7 does not utilizing connection pool in rds proxy instead it create new connection on every request

他们建议在对数据库进行所有查询之前修改 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"}'

【讨论】:

  • 就我而言,我没有使用 Lambda。即使这样,提交的问题也不是我面临的问题。经过一些研究,由于某些陈述,它与“会话固定”有关,这会阻止代理重新使用连接。只要它们被重复使用,空闲连接就可以了。不过,感谢您的回答。
猜你喜欢
  • 2021-02-19
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多