【问题标题】:Is there a way to increase DB connection time for an AWS RDS during a large SQL query?有没有办法在大型 SQL 查询期间增加 AWS RDS 的数据库连接时间?
【发布时间】:2021-01-04 21:36:45
【问题描述】:
当我第一次设置我的 Postgresql 数据库时,我能够运行一个大约需要 5 分 30 秒才能完成的大型查询。我将我的 AWS RDS 实例切换到较低层以查看性能差异是什么,但查询不成功,因此我将其切换回我选择的原始实例。但是,即使现在实例返回到原始 AWS 层,查询仍然无法正常工作。查看 AWS CloudWatch 监控中的实例,似乎数据库连接仅保持活动状态 5 分钟。有没有办法延长这个时间?
我正在使用 DBeaver、AWS RDS 和 Postgresql。
【问题讨论】:
标签:
postgresql
amazon-rds
dbeaver
【解决方案1】:
您可以在 RDS Parameter Group 中增加“tcp_keepalives_ilde”,设置在 30 - 60 秒之间即可。根据Postgres Documentation,指定 TCP 应该向客户端发送 keepalive 消息的不活动秒数。
根据here,不建议在您的场景中设置 statement_timeout。默认值为 0,值为零(默认值)禁用超时。
在AWS RDS中,“tcp_keepalives_idle”是一个动态参数,表示应用后立即生效,无需重启实例。 AWS 文档中的实际措辞如下:“当您更改动态参数并保存数据库参数组时,无论立即应用设置如何,都会立即应用更改”
为了其他方便,可以参考AWS Documentation创建新参数组,然后返回RDS修改RDS实例使用新创建的参数组。
【解决方案2】:
我似乎通过每 60 秒启用一个 TCP keepalive 参数解决了我的问题。
转到 Amazon RDS > 参数组 > 创建 Postgres 参数组 > 选择新参数组 > 单击编辑参数 > 过滤“alive” > 将 tcp_keepalives_idle 设置为 60 > 保存。我还过滤了“超时”并将 statement_timeout 设置为 3600000,尽管这可能是不必要的。
然后修改您的数据库并将新参数组应用到它。您可能需要重启实例才能应用。