AWS RDS PostgreSQL错误"剩余连接插槽保留用于非复制超级用户连接"

mic*_*ael 16 sql postgresql database-connection amazon-web-services amazon-rds

在仪表板中,我看到数据库实例当前有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();
Run Code Online (Sandbox Code Playgroud)
  1. 我可以在代码中做些其他事情吗?

  2. 我应该在数据库管理中做些什么吗?

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

err*_*07s 19

亚马逊必须根据每种型号的权利设置连接数,以获得一定数量的内存和连接

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)
Run Code Online (Sandbox Code Playgroud)

但是,如果您需要,可以将最大连接大小更改为自定义

从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';
Run Code Online (Sandbox Code Playgroud)

  • 以下是连接数的官方来源:https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Managing.Performance.html (2认同)

kos*_*cki 7

我正在使用 Amazon RDS、SCALA、Postgresql 和 Slick。首先 - RDS 中的可用连接数取决于可用RAM的数量- 即 RDS 实例的大小。最好不要更改默认的 conn number

您可以通过在 RDS 数据库实例上执行以下 SQL 语句来检查最大连接数:

show max_connections; 
Run Code Online (Sandbox Code Playgroud)

检查您的 SPRING 配置以查看您生成的线程数

database {
  dataSourceClass = org.postgresql.ds.PGSimpleDataSource
  properties = {
    url = "jdbc:postgresql://test.cb1111.us-east-2.rds.amazonaws.com:6666/dbtest"
    user = "youruser"
    password = "yourpass"
  }
  numThreads = 90
}
Run Code Online (Sandbox Code Playgroud)

所有连接都是在 SRING BOOT初始化时建立的,因此请注意不要超过 RDS 限制。这包括连接到数据库的其他服务。在这种情况下,连接数将是 90+。

db.t2.small 的当前限制为198(4GB RAM)

在此处输入图片说明


小智 6

您可以在参数组中更改idle_in_transaction_session_timeout以删除空闲连接。

idle_in_transaction_session_timeout(整数)

终止具有空闲时间超过指定持续时间(以毫秒为单位)的打开事务的任何会话。这允许释放该会话持有的任何锁并重用连接槽;它还允许清除仅对该事务可见的元组。有关这方面的更多详细信息,请参阅第 24.1 节。

默认值 0 禁用此功能。

AWS RDS 中的当前值86400000转换为小时 (86400000/1000/60/60) 时为 24 小时。


Céd*_*lly 5

您可以更改Parameters GroupRDS 实例中的最大连接数。尝试增加它。或者您可以尝试升级您的实例,因为最大连接数设置为{DBInstanceClassMemory/31457280}

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html

  • 谢谢,有没有办法定期关闭连接? (2认同)