AWS RDS PostgreSQL 错误“剩余的连接槽被保留用于非复制超级用户连接”

新手上路,请多包涵

在仪表板中,我看到当前有 22 个与数据库实例的打开连接,阻止新连接并出现错误:

剩余的连接槽保留给非复制超级用户连接。

我从 EC2 实例上运行的 Web 服务 API 访问数据库,并始终保持以下最佳实践:

 Connection connection = DriverManager.getConnection(URL, USER_NAME, PASSWORD);
Class.forName(DB_CLASS);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(SQL_Query_String);
...
resultSet.close();
statement.close();
connection.close();

  1. 我可以在代码中做其他事情吗?

  2. 我应该在数据库管理中做其他事情吗?

  3. 有没有办法定期关闭连接?

原文由 michael 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

亚马逊必须根据每个模型要求一定数量的内存和连接的权利来设置连接数

MODEL      max_connections innodb_buffer_pool_size
---------  --------------- -----------------------
t1.micro   34                326107136 (  311M)
m1-small   125              1179648000 ( 1125M,  1.097G)
m1-large   623              5882511360 ( 5610M,  5.479G)
m1-xlarge  1263            11922309120 (11370M, 11.103G)
m2-xlarge  1441            13605273600 (12975M, 12.671G)
m2-2xlarge 2900            27367833600 (26100M, 25.488G)
m2-4xlarge 5816            54892953600 (52350M, 51.123G)

但是,如果您愿意,可以通过以下方式将最大连接大小更改为自定义值

从 RDS 控制台 > 参数组 > 编辑参数,

您可以将 max_connections 参数的值更改为自定义值。

为了定期关闭连接,您可以设置一个类似这样的 cron 作业。

 select pg_terminate_backend(procpid)
from pg_stat_activity
where usename = 'yourusername'
 and current_query = '<IDLE>'
 and query_start < current_timestamp - interval '5 minutes';

原文由 error2007s 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题