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

ioekq8ef  于 2023-03-01  发布在  PostgreSQL
关注(0)|答案(4)|浏览(170)

在 Jmeter 板中,我看到当前有22个打开的DB示例连接,阻塞新连接并显示错误:
剩余的连接插槽保留用于非复制超级用户连接。
我从EC2示例上运行的Web服务API访问DB,并始终保持以下最佳实践:

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.我可以在代码中做其他事情吗?
1.我应该在DB管理中做些别的事情吗?
1.是否有办法定期关闭连接?

bbmckpt7

bbmckpt71#

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

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';
n53p2ov0

n53p2ov02#

我正在使用Amazon RDS、SCALA、Postgresql & Slick。首先-RDS中可用连接的数量取决于可用RAM的数量-即RDS示例的大小。最好不要更改默认连接数
您可以通过在RDS DB示例上执行以下SQL语句来检查最大连接数:

show max_connections;

检查您的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
}

所有的连接都是在SRING Boot 初始化时建立的因此请注意不要超过RDS限制。这包括连接到DB的其他服务。在这种情况下,连接数将超过90。
db.t2.small的当前限制为198(4GB内存)

gr8qqesn

gr8qqesn3#

可在参数组idle_in_transaction_session_timeout中进行更改,以删除空闲连接。
事务会话超时中的空闲(整数)
终止任何具有打开事务的会话,如果该打开事务的空闲时间超过指定的持续时间(毫秒)。这将允许释放该会话持有的任何锁并重用连接槽;它还允许清空只对该事务可见的元组。2关于这一点的更多细节,请参见24. 1节。
默认值0禁用此功能。
AWS RDS中的当前值为86400000,转换为小时数(86400000/1000/60/60)时为24小时。

guicsvcw

guicsvcw4#

您可以在Parameters Group中更改RDS示例的最大连接数。请尝试增加它。或者,您也可以尝试升级示例,因为最大连接数已设置为{DBInstanceClassMemory/31457280}
http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html

相关问题