AWS RDS PostgreSQL error " оставшиеся слоты подключения зарезервированы для подключений суперпользователя без репликации"

на панели мониторинга я вижу, что в настоящее время 22 открытых соединения с экземпляром БД блокируют новые соединения с ошибкой: "оставшиеся слоты подключения зарезервированы для подключений суперпользователя без репликации".

Я обращаюсь к БД из API веб-службы, работающей на экземпляре EC2, и всегда придерживаюсь лучшей практики:

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. есть ли способ периодически закрывать соединения?

спасибо,

3 ответов


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

вы можете изменить максимальные соединения в Parameters Group для вашего экземпляра RDS. Попробуйте увеличить его. Или вы можете попробовать обновить свой экземпляр, так как max connexions имеет значение {DBInstanceClassMemory/31457280}

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


Я использую Amazon RDS, SCALA,Postgresql & Slick. Прежде всего-количество доступных соединений в RDS зависит от количества доступных RAM - т. е. размер экземпляра RDS. Это лучше всего не изменять номер conn по умолчанию.

вы можете проверить максимальный номер соединения, выполнив следующую инструкцию SQL на экземпляре БД RDS:

show max_connections; 

Проверьте конфигурацию пружины, чтобы увидеть сколько нити ты нереста:

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 инициализации поэтому остерегайтесь не пересекать предел RDS. Это включает в себя другие службы, которые подключаются к БД. В этом случае количество подключений будет 90+.

текущий предел для БД.Т2.мал 198 (4 ГБ оперативной памяти)

enter image description here