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

AWS RDS PostgreSQL错误“;剩余的连接插槽保留给非复制超级用户连接”;,sql,postgresql,amazon-web-services,database-connection,amazon-rds,Sql,Postgresql,Amazon Web Services,Database Connection,Amazon Rds,在仪表板中,我看到当前有22个打开的DB实例连接,阻止了新的连接,错误如下: 剩余的连接插槽保留给非复制超级用户连接 我正在从运行在EC2实例上的web服务API访问DB,并始终保持以下最佳实践: Connection connection = DriverManager.getConnection(URL, USER_NAME, PASSWORD); Class.forName(DB_CLASS); Statement statement = connection.createStatemen

在仪表板中,我看到当前有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();
  • 我可以在代码中执行其他操作吗

  • 我应该在数据库管理中做些别的事情吗

  • 有没有办法定期关闭连接


  • 您可以更改RDS实例的
    参数组中的最大连接数。试着增加它。
    或者您可以尝试升级实例,因为max connexions设置为
    {DBInstanceClassMemory/31457280}


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

    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';
    
    选择pg\u terminate\u后端(procpid)
    来自pg_统计_活动
    其中usename='yourusername'
    和当前的_查询=“”
    和查询开始<当前时间戳-间隔“5分钟”;
    
    我正在使用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限制。这包括连接到数据库的其他服务。在这种情况下,连接数将为90+

    db.t2.small的电流限制为198(4GB内存)


    您可以在参数组
    idle\u in\u transaction\u session\u timeout
    中更改以删除空闲连接

    空闲\u在\u事务\u会话\u超时(整数)

    终止任何会话,该会话包含已闲置了一段时间的打开事务 超过指定的持续时间(毫秒)。这允许任何 该会话持有的锁将被释放,连接插槽将被删除 可重复使用;它还允许使用仅对此事务可见的元组 用吸尘器吸。有关这方面的更多详细信息,请参见第24.1节

    默认值0将禁用此功能


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

    谢谢,有没有办法定期关闭连接?顺便问一下,谢谢-我如何在AWS RDS中添加cron作业?谢谢,您必须从本地或某些服务器上运行它。我有EC2/Elastic beanstalk env。有办法从那里逃跑吗?从未对cron作业进行编码。。。谢谢,首先您必须确保您可以从该实例访问RDS。设置cron作业非常简单,只需在谷歌上为脚本文件运行cron作业,您就会找到大量文档。谢谢,有没有办法定期关闭连接?其实答案不错